我有一个关于在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