Вызов функции F# из C#
Я просмотрел другие инструкции и до сих пор не знаю, как это сделать. У меня есть два проекта (калькулятор в C# и логика в F#). Я добавил ссылку на логику в калькуляторе, а также ссылку на FSharp.Ядро
Однако, когда я добавляю строку
float result = Logic.start(formula);
В моем проекте C# я получаю сообщение об ошибке:
" логика имени не существует в текущем контексте."
В проекте logic есть модульная логика, поэтому она должна появиться правильно? Что я все еще отсутствует?
EDIT: вот определение функции...
let start formula =
core (List.ofSeq formula) [] []
1 ответ:
Вы не можете ссылаться из C# только на модуль F# без какого-либо пространства имен. Сделайте что-нибудь вроде этого:
// F# project namespace Some module Logic = let start formula = .....Или эквивалент
// F# project module Some.Logic let start formula = .....И
// C# project ..... Some.Logic.start(formula)И ссылка на проект F# из проекта C#.
UPDATE : Как указал JackP, существует и другая альтернатива, позволяющая полностью избежать использования явного пространства имен на стороне F#.
Когда в C# вы создаете класс вне любого пространства имен, на этот класс можно ссылаться, предваряя его имя следующим образом:
globalконтекстное ключевое слово, за которым следует оператор::, который является способом ссылки напространство имен верхнего уровня .NET по умолчанию . Модуль F# с простым именем вне любого пространства имен с точки зрения ссылки эквивалентен модулю, имеющемуnamespace globalв самой первой строке кода. Применяя это соображение к вашему случаю, вы можете альтернативно сделать:// F# definition // namespace global is assumed module Logic let start formula = ..... // C# reference ...global::Logic.start(formula)...Кровавые подробности о
global::доступны на MSDN.
Comments