У меня есть вопрос относительно соглашений об использовании блоков do в F #. В первую очередь это возникает при работе с библиотечными классами .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