我有一個關於在F#中使用do塊的約定的問題。主要是在使用.NET庫類和其他.NET代碼時出現這種情況。F#在do塊中打包語句
讓我給你舉個例子。
1.用做塊周圍包裹的語句:
let drawHelloName (width:int, height:int) name =
let bmp = new Bitmap(width, height)
use fnt = new Font("Arial", 12.0f)
use gr = Graphics.FromImage(bmp)
do
gr.Clear(Color.White)
gr.DrawString(name, fnt, Brushes.Black, PointF(10.0f, 10.0f))
bmp
2.如果沒有做塊:
let drawHelloName (width:int, height:int) name =
let bmp = new Bitmap(width, height)
use fnt = new Font("Arial", 12.0f)
use gr = Graphics.FromImage(bmp)
gr.Clear(Color.White)
gr.DrawString(name, fnt, Brushes.Black, PointF(10.0f, 10.0f))
bmp
現在在我的心目中,我覺得例1更清晰更多的是F#的觀點和風格。由於在函數式編程中處理語句並不是很「自然」,所以我們明確地將這些語句封裝在do塊中以表明它們是副作用。但我想知道,關於這個的公約是什麼?
雖然一個獨立的方法調用出現在C#和F#一樣,F#斷言,這樣的調用返回'unit',這使得'do'在許多情況下是多餘的。 – Daniel 2014-12-09 14:55:21