Если вы хотите создать делегата из функции в F #, вы можете использовать оператор new
и дать ему функцию в качестве аргумента:
let function_1 (x:double) (y:double) =
()
Program.call_func(s, new Action<double, double>(function_1))
Но для какая-то причина, если попытаться использовать тот же подход с делегатом, который содержит ref
, вы получите эту ошибку:
Это значение функции используется для создания типа делегата, сигнатура которого включает byrefаргумент.Вы должны использовать явное лямбда-выражение, принимающее 2 аргумента.
Итак, если вы следуете совету, приведенному в сообщении об ошибке, вы можете написать следующее:
let function_1 (x:double) (y:double byref) =
y <- 6.0
Program.call_func(s, new fn(fun x -> fun y -> function_1 x &y))
Компилируетсяи работает как положено.
Обратите внимание, что для изменения параметра y
необходимо использовать оператор <-
.Использование let y = 6.0
объявляет совершенно другую переменную, которая скрывает параметр.