這與部分應用程序有關。您可以將此函數綁定到另一個名稱,同時提供start
和rate
參數,從而創建類型爲() -> DateTime
的函數。只有當您調用該函數時,纔會執行「elapsed = now - start」和「start.AddTicks」的計算。就像這樣:
let timeThis =
let stopClock = acclock DateTime.Now 500
doStuff()
stopClock() // The function is only executed now
如果你不會有在年底()
參數,你會直接如果添加rate
值執行該語句。
let acclock' (start:DateTimeOffset) rate =
let now = DateTime.Now
let elapsed = now - start
start.AddTicks (elapsed.Ticks * rate)
let timeThis1 =
let stopClock = acclock' DateTime.Now
doStuff()
stopClock 500 // This is only executed now
// Or
let timeThis2 =
let stopClock = acclock' DateTime.Now 500 // Wait, we calculated it immediately
doStuff()
stopClock // This is just a value
只是FYI;在像F#這樣的FPL中,像'unit - > int'這樣的函數意味着它是一個取單位值的函數。不像它通常用C語言來解釋;一個不帶值的函數。這對我來說是FP比C語言更多的小好處之一。在C#中,你通常需要對'void'情況進行特殊處理(比如'Task'和'Task <>')。在F#中,函數總是獲取並返回一個值,該單元值不需要特殊處理。它被稱爲單位的原因是因爲它映射到「單位」類別,這是一個只有一個值的類別。 – FuleSnabel