Как вызвать функцию F # из непосредственного окна VS2010 - PullRequest
7 голосов
/ 24 июля 2010

Во время отладки приложения F # я хотел бы иметь возможность вызывать метод F # из непосредственного окна VS2010, но, похоже, он не работает.Проблема заключается в том, что методы F # на самом деле являются объектами FSharpFunc.Я пытался использовать метод Invoke, но интерактивное окно не распознает его.

1 Ответ

10 голосов
/ 24 июля 2010

Интеграция F # для Visual Studio не поддерживает выражения F # в непосредственном окне (или в наблюдениях), поэтому единственный вариант - написать код C #, соответствующий скомпилированному представлению, которое использует F #. Я попытался сделать это, и у меня возникла та же проблема, что и вы, описанная выше - метод Invoke, похоже, есть (в Reflector), но Visual Studio не хочет вызывать его напрямую. Я попробовал это на следующем примере:

let foo f = 
  let n = f 1 2 // Breakpoint here
  n + 1

Однако есть и другие способы вызова функции. В этом случае фактический код, сгенерированный компилятором F #, является вызовом метода InvokeFast. Если вы введете следующее в ближайшее окно, оно будет работать:

Microsoft.FSharp.Core.FSharpFunc<int, int>.InvokeFast<int>(f, 1, 2)  |

Также кажется, что вы можете вызвать обычный метод Invoke, используя dynamic из C # 4.0 (доказывая, что метод действительно существует!):

((dynamic)f).Invoke(1, 2)

Это работает, только если вы добавляете ссылку на Microsoft.CSharp.dll (и используете некоторый тип, определенный в сборке где-то в вашем коде - например, в качестве аннотации - для загрузки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...