У меня есть библиотека ac # dll с одним методом g
, принимающая следующую функцию f
в C # в качестве входа
void f(double[] x, ref double func, double[] grad, object obj)
В теле функции значения func
и grad
обновляются.Входная сигнатура g(f)
в F # читает
f:float[]-> byref<float> -> float[]-> obj->unit
как мне написать f
в f #, чтобы использовать g(f)
в f #?
РЕДАКТИРОВАТЬ когда я слежу за ответом ildjarn ниже, как
let f(x:float[]) (func:byref<float>) (grad:float[]) (obj: obj) =
func <- ...
grad.[0] <- ...
grad.[1] <- ...
...
()
Я получил ошибку g(f)
с
Это значение функциииспользуется для создания типа делегата, чья сигнатура включает аргумент byref.Вы должны использовать явное лямбда-выражение, принимающее 4 аргумента.
что я должен сделать, чтобы это работало?Благодарю. ОБНОВЛЕНИЕ: Оказывается, я должен использовать g(fun (x:float[]) (func:byref<float>) (grad:float[]) (obj: obj) -> ...
.Невозможно дать внутренней функции имя типа f
.