Рассмотрим следующее определение записи и сопутствующий метод:
type MyRecord = {
FieldA : int
FieldB : int
FieldC : int option
FieldD : int option
} with
static member Create(a,b,?c,?d) = {
FieldA = a
FieldB = b
FieldC = c
FieldD = d
}
Вызов метода Create, как показано ниже, завершается успешно:
//ok
let r1 = MyRecord.Create(1, 2)
//ok
let r2 = MyRecord.Create(1,2,3)
Однако попытка использовать именованные параметры с обязательными или необязательными параметрами не будет компилироваться. Например
//Compilation fails with a message indicating Create requires four arguments
let r2 = MyRecord.Create(FieldA = 1, FieldB =2)
Согласно документам MSDN (http://msdn.microsoft.com/en-us/library/dd233213.aspx)
Именованные аргументы разрешены только для методов, но не для связанных функций, значений функций или лямбда-выражений.
Итак, исходя из этого, я смогу использовать именованные аргументы для выполнения Create. Что-то не так с моим синтаксисом или я неправильно интерпретирую правила? Есть ли способ использовать именованные аргументы в этом контексте?