2012-03-28 5 views
9

Wenn man die F # Interactive Shell (FSI) verwendet, die abgeleitete Ausdrucksart (signature) zusammen mit seinem Wert auf die Konsole ausgegeben:Wie generiert man die Signatur vom Typ F # ähnlich wie FSI in meinem eigenen Code?

val it : int * string * float = (42, "Hello F#", 42.0) 

Wie kann ich das gleiche Verhalten in meinem eigenen Code mimick, z.B. um die abgeleiteten Typen als String für einen F # -Ausdruck zu erhalten?

Ich brauche keine F # Ausdrücke dynamisch auszuwerten, die Ausdrücke sind in der Kompilierzeit bekannt und sind Teil meines (statischen) F # -Codes. Ich brauche diese Funktion, um die FSI-Ausgabe in LINQPad für meine F # -Demos nachahmen zu können.

+0

Wenn die Ausdrücke Voraus-Zeit bekannt sind, warum sie nicht durch FSI laufen Voraus-Zeit als auch? – pblasucci

+0

@pblasucci Ich benutze LinqPAD für Live-Codierung und es funktioniert perfekt mit F #. Das Wechseln zu FSI jedes Mal, wenn ich eine Unterschrift für einen Ausdruck zeigen muss, wäre zu viel Zeitverschwendung. Aber ich halte es als eine Option, danke! –

+0

@AlexanderGalkin Kann LinqPAD einen Shell-Befehl ausführen? Sie könnten den Befehl fsc mit dem Flag --sig überschreiben und ausführen und ihm die Datei übergeben, an der Sie gerade arbeiten. –

Antwort

10

Unquote Mit

Unquote hat eine Anlage für die # Unterschrift eines Typs F bekommen. Laden Sie einfach die neueste Version herunter und fügen Sie eine Referenz über LINQPad zu Unquote.dll hinzu, dann können Sie z.

enter image description here

Wenn Sie interessiert sind, können Sie sich den Quellcode für die Umsetzung der FSharpNameType Erweiterung Peak: http://code.google.com/p/unquote/source/browse/tags/2.1.0/Unquote/ExtraReflection.fs#54.

FsEye Mit

Ein weiterer toller Ansatz wäre LINQPad Beta Custom Visualizer API verwenden FsEye in LINQPad einzubetten (FsEye verwendet die gleiche # Art Signatur Druck Algorithmus F als Unquote). Dies ist auch sehr einfach, alles, was Sie tun müssen, ist Download LINQPad beta, downloaden und Referenz FsEye.dll von der neuesten Version von FsEye, dann können Sie tun, z.

enter image description here

+0

Ich liebe ** diese Umgebung, die Daten und Metadaten vermischt. Ich würde sie genauso gerne im Visual Studio lieben, indem ich Ausdrucksersatz mache, um konkrete Ergebnisse von Funktionen zu haben, die wir schreiben ... – nicolas

+0

Fehlende Bilder!So frustrierend!!! :-) –

+1

Anstatt eine DLL manuell herunterzuladen und zu referenzieren, da LinqPad beta Nuget-Pakete unterstützt, vielleicht ein kleines Paket der FsEye dll? – jbtule

1

Wenn Sie sich den F # -Compiler-Code anschauen und sehen, wie die Option --sig vom Compiler gehandhabt wird, denke ich, dass Sie das bekommen, wonach Sie suchen. Mehr zu den --sig Option und Signaturen hier:

Signatures (F#)

+0

Vielen Dank für Ihren Vorschlag - Ich habe die Unterschriften zu meiner Frage hinzugefügt. Der Versuch, in die Compiler-Implementierung einzutauchen, erscheint mir wie ein Overkill, sorry. –

+0

Warum nicht einfach die Option '--sig' verwenden und die Signaturdatei während der Demos präsentieren? –

+0

Ich dachte, er fragt, wie man das programmatisch macht. –

Verwandte Themen