Вызов функции F# из C#



Я просмотрел другие инструкции и до сих пор не знаю, как это сделать. У меня есть два проекта (калькулятор в C# и логика в F#). Я добавил ссылку на логику в калькуляторе, а также ссылку на FSharp.Ядро



Однако, когда я добавляю строку



float result = Logic.start(formula);


В моем проекте C# я получаю сообщение об ошибке:




" логика имени не существует в текущем контексте."




В проекте logic есть модульная логика, поэтому она должна появиться правильно? Что я все еще отсутствует?



EDIT: вот определение функции...



let start formula =
core (List.ofSeq formula) [] []
694   1  

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

    Ничего не найдено.