Есть ли какой-нибудь аналог в F #? Что-то вродеC++ - как статические переменные внутри функции F #
let f() =
let mutable static a = 0
...
?
Есть ли какой-нибудь аналог в F #? Что-то вродеC++ - как статические переменные внутри функции F #
let f() =
let mutable static a = 0
...
?
Если вы desugar let f() = ...
- let f = fun() -> ...
, вы можете поместить объявление a
внутри определения f
, но перед началом функции п. Это сделает функцию закрытой над a
, сохраняя a
местным по отношению к f
. Проблема заключается в том, что вы не можете закрывать переменные переменные, поэтому вместо этого вы должны использовать ссылку:
let f =
let a = ref 0
fun() ->
....
Отлично. Благодарю. –
Простейший аналог поставить Выпускаемый до функции:
let mutable static a = 0
let f() =
Если вы действительно хотите, чтобы скрыть эти переменную можно было накрыть всю вещь в родительском модуле.
В противном случае выражения последовательности позволяют запоминать переменные в функциях, но являются довольно значительным изменением.
Некоторые другие идеи - скрыть внутри класса:
type t() =
static let mutable t = 1
static member f() = 1
или модуль
module t =
let mutable private t = 1
let f() = 1
в модуле подхода, е видно, но т не
Немного сложнее, чем вариант из sepp2k. Спасибо за помощь. –
Вам нужен доступ к этой переменной извне функции? Для чего это «статический» модификатор? – Petr
@ Петр № Нет внешнего доступа. Я знаю, что это не «функциональный путь». Функция должна вызываться только один раз, поэтому меня интересует. –