Beim Debuggen einer F # -Anwendung möchte ich gerne eine F # -Methode vom VS2010-Sofortfenster aus aufrufen, aber es scheint nicht zu funktionieren. Das Problem scheint zu sein, dass F # -Methoden tatsächlich FSharpFunc-Objekte sind. Ich habe versucht, die "Invoke" -Methode zu verwenden, aber das interaktive Fenster erkennt sie nicht.Wie rufe ich eine F # -Funktion aus dem unmittelbaren Fenster von VS2010 auf
Antwort
Die F # -Integration für Visual Studio unterstützt keine F # -Ausdrücke im unmittelbaren Fenster (oder Uhren). Daher besteht die einzige Option darin, C# -Code entsprechend der kompilierten Darstellung von F # zu schreiben. Ich habe versucht, das zu tun, und ich habe das gleiche Problem, das Sie beschrieben haben - die Invoke
-Methode scheint dort zu sein (in Reflector), aber Visual Studio möchte sie nicht direkt aufrufen. Ich versuchte es mit dem folgenden Beispiel:
let foo f =
let n = f 1 2 // Breakpoint here
n + 1
Es gibt jedoch andere Möglichkeiten, die Funktion aufzurufen. In diesem Fall ist der tatsächliche Code, der vom F # -Compiler generiert wird, ein Aufruf an die Methode InvokeFast
. Wenn Sie die folgenden Funktionen dem sofortigen Fenster eingeben, funktioniert es:
Microsoft.FSharp.Core.FSharpFunc<int, int>.InvokeFast<int>(f, 1, 2) |
Es scheint auch, dass Sie die üblichen Invoke
Methode dynamic
von C# 4.0 nennen kann (was beweist, dass das Verfahren tatsächlich gibt es!):
((dynamic)f).Invoke(1, 2)
Dies funktioniert nur, wenn Sie einen Verweis auf Microsoft.CSharp.dll
hinzufügen (und einen Typ verwenden, der in der Assembly irgendwo in Ihrem Code definiert ist - z. B. als Anmerkung -, damit er geladen wird).
Ok, das hat funktioniert! Ich versuchte die statische InvokeFast, aber ich wusste nicht, dass ich die Last von Microsoft.CSharp erzwingen musste. Dynamisch ist ziemlich clever;) –
Nur um zu verdeutlichen - der 'InvokeFast' Ansatz sollte ohne' Microsoft.CSharp.dll' funktionieren (obwohl vielleicht etwas getan werden muss, damit das unmittelbare Fenster 'FSharp.Core.dll' lädt). Die C# -Bibliothek wird nur für 'dynamic' benötigt. –
- 1. Wie rufe ich Redis StringSet() aus F #
- 2. Wie rufe ich Enumerable.Join von F #?
- 3. Abrufen eine Liste von EntityValidationErrors' in dem unmittelbaren Fenster
- 4. Wie rufe ich eine andere Funktion in Lisp auf;
- 5. JavaScript - Wie rufe ich eine Funktion innerhalb einer Funktion auf?
- 6. Wie rufe ich eine serverseitige Funktion von Javascript auf?
- 7. Wie rufe ich eine Funktion über eine Membervariable auf?
- 8. Wie rufe ich eine Objective C-Funktion auf?
- 9. Wie rufe ich eine abgeleitete Klassenmethode aus der Basisklasse auf?
- 10. Wie rufe ich eine JavaScript-Funktion auf, nachdem ich eine Datei im Fenster "Datei auswählen" ausgewählt und geschlossen habe?
- 11. Wie rufe ich "New Vertical Tab Group" aus einem VS2010-Add-In auf?
- 12. Wie rufe ich eine Zeiger-zu-Stab-Funktion auf?
- 13. Wie rufe ich eine .NET Assembly aus C/C++ auf?
- 14. Wie rufe ich eine RemoteObject-Methode aus ActionScript auf?
- 15. Wie rufe ich eine TSQL-Funktion von ado.net
- 16. Wie rufe ich eine Member-Funktion von ComponentDidMount
- 17. Wie rufe ich die ReplaceFile-Funktion von C# auf?
- 18. WP7 MVVM Wie rufe ich mich.setfocus() aus dem ViewModel?
- 19. Wie rufe ich eine Prototyp-Funktion von einer anderen Funktion auf?
- 20. Lambda-Ausdrücke im unmittelbaren Fenster für VS2015
- 21. Wie rufe ich eine Funktion aus einer externen js-Datei in einer Angular 2-Komponente auf?
- 22. Wie rufe ich eine VSTO-Funktion aus einer Formel in Excel auf?
- 23. Wie rufe ich ein Perl-Skript aus Excel auf?
- 24. Wie rufe ich eine .Net DLL (Funktion) von Java auf Mono/Linux
- 25. Rufe ich diese Funktion falsch?
- 26. Wie rufe ich eine statische Eigenschaft auf einem Swift-Protokoll von einer generischen Funktion auf?
- 27. Wie rufe eine Funktion in einer externen .js-Datei auf?
- 28. Wie rufe ich eine Capistrano-Aufgabe von einer anderen auf?
- 29. Wie rufe ich eine Entity-Methode aus Zweig
- 30. Warum kann ich im unmittelbaren Fenster keine neuen Variablen deklarieren?
Ich habe vor ein paar Tagen einen Vorschlag in MS Connect eingereicht: https://connect.microsoft.com/VisualStudio/feedback/details/574242/f-debugger-support –
Dies scheint nur ein Problem, wenn Sie habe eine Funktion mit einem einzigen Argument. Ich bin in der Lage, eine Funktion mit mehreren (Curry) Argumente direkt aus dem unmittelbaren Fenster mit der gleichen Syntax wie C# –