Тип параметра не менее аналогичен Nullable<T>
и ссылочным типам в C #. Значением типа Option<T>
является либо None
, что означает отсутствие инкапсулированного значения, либо Some
с конкретным значением T
. Это похоже на то, как Nullable<int>
в C # равно либо , нулевое значение, или имеет ассоциированный int
, а String
в C # равно 1015 * либо пустая ссылка, или относится к объекту String.
Когда вы используете значение параметра, вы обычно указываете два пути - один для случая, когда является ассоциированным значением, и один, где не . Другими словами, этот код:
let stringLength (str:Option<string>) =
match str with
| Some(v) -> v.Length
| None -> -1
похож на:
int StringLength(string str)
{
if (str != null)
{
return str.Length;
}
else
{
return -1;
}
}
Я полагаю, что общая идея состоит в том, что принуждает вас (ну, почти) обрабатывать случай "без связанного значения / объекта", делает ваш код более устойчивым.