Arhn - архитектура программирования

Как вызвать функцию F# из непосредственного окна VS2010

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


  • Несколько дней назад я отправил предложение в MS Connect по этому поводу: connect.microsoft.com/VisualStudio/feedback/details/574242/ 24.07.2010
  • Это кажется проблемой только в том случае, если у вас есть функция с одним аргументом. Я могу вызвать функцию с несколькими (каррированными) аргументами непосредственно из непосредственного окна с тем же синтаксисом, что и C#. 26.07.2010

Ответы:


1

Интеграция 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 (и используете некоторый тип, определенный в сборке, где-то в вашем коде, например, в качестве аннотации, чтобы он загружался).

23.07.2010
  • Хорошо, это сработало! Я попробовал статический InvokeFast, но не понял, что мне нужно принудительно загрузить Microsoft.CSharp. Использование динамики довольно умно;) 24.07.2010
  • Просто для уточнения - подход InvokeFast должен работать без Microsoft.CSharp.dll (хотя, возможно, нужно что-то сделать, чтобы непосредственное окно загружало FSharp.Core.dll). Библиотека C# нужна только для dynamic. 24.07.2010
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..