簡體   English   中英

讓綁定和F#中的構造函數

[英]let bindings and constructors in F#

我在F#中定義一個秒表:

open System.Diagnostics

let UptimeStopwatch = Stopwatch.StartNew()

我每三秒鍾打印一次

printfn "%A" UptimeStopwatch.Elapsed

每次我得到“ 00:00:00.0003195”或類似的值。 每當我引用UptimeStopwatch時,F#都會調用構造函數嗎? 如果是這樣,我該如何繞過該廣告以達到預期的效果? 這是功能性和命令性編程的混亂混合。

F#似乎在解釋如下語句

let MyFunction = DoSomething()

let MyFunction() = DoSomething()

不一樣。 第一個將DoSomething()的返回值綁定到變量MyFunction ,第二個將操作DoSomething()綁定到函數MyFunction()

我對UptimeStopwatch使用是正確的,並且該錯誤在實現中的其他地方。

我看到您已經在代碼的其他地方發現了問題,但是問題中的兩行仍然需要一些時間才能運行,而且有趣的是,您可以減少開銷。

當我運行示例中的兩行時,它將打印一個大約0.0002142的值。 您可以使用let來存儲經過的時間,從而使時間更短,因為構造printf格式字符串(第一個參數)的表示會帶來一些開銷:

let UptimeStopwatch = Stopwatch.StartNew()
let elapsed = UptimeStopwatch.Elapsed
printfn "%A" elapsed

這樣平均打印出大約0.0000878的數字(小兩倍)。 如果使用Console ,則結果類似(因為在調用Console之前Elapsed獲得Elapsed屬性,並且在此期間無需執行其他任何操作):

let UptimeStopwatch = Stopwatch.StartNew()
System.Console.WriteLine(UptimeStopwatch.Elapsed)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM