, поэтому я должен объявить все методы в цепочке, которые используют getDate с () после них, и вызывать их соответствующим образом, чтобы они переоценивали при вызове, в противном случае они становятся фиксированными переменными.Это правильно?
Я бы сказал иначе: let
всегда связывает значение, но в let getDate ()
или let sleep x
случае эти значения оказываются функциями;они в основном эквивалентны
let sleep = fun x -> Async.Sleep x |> Async.RunSynchronously
let getDate = fun () -> DateTime.Now.ToString()
Конечно, это не совсем то, что происходит, если вы исследуете байт-код, но «морально» это происходит.С этими определениями
let sleep = fun x -> Async.Sleep x |> Async.RunSynchronously
let log = fun date message -> printfn "%s %s" date message
let getDate = fun () -> DateTime.Now.ToString()
let logg = fun x -> log (getDate ()) x
logg "First"
sleep 1000
logg "Second"
sleep 1000
вы получите тот же результат:
30/11/2018 19:59:40 First
30/11/2018 19:59:41 Second