2012-03-28 11 views
9

Jeśli ktoś korzysta z F # Interactive Shell (FSI), z wywnioskować typ wyrażenie (signature) jest drukowany na konsolę wraz z jej wartością:Jak wygenerować podpis typu F # podobny do FSI w moim własnym kodzie?

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

Jak mogę mimick samo zachowanie w mój własny kod, na przykład aby uzyskać wywnioskowane typy jako ciąg dla wyrażenia F #?

Nie muszę dynamicznie oceniać żadnych wyrażeń F #, wyrazy są znane w czasie kompilacji i są częścią mojego (statycznego) kodu F #. Potrzebuję tej funkcji, aby móc naśladować wyjście FSI w LINQPad na moje dema F #.

+0

Jeśli wyrażenia są znane z wyprzedzeniem-of-time, dlaczego nie uruchomić je przez FSI naprzód-of-time, jak również? – pblasucci

+0

@pblasucci Używam LinqPAD do kodowania na żywo i działa doskonale z F #. Przejście na FSI za każdym razem, gdy będę musiał podpisać wyrażenie, będzie zbyt długo marnować czas. Ale zachowam to jako opcję, dzięki! –

+0

@AlexanderGalkin Czy LinqPAD wykonuje polecenie powłoki? Możesz wyłuskać i uruchomić polecenie fsc z flagą --sig i przekazać plik, nad którym obecnie pracujesz. –

Odpowiedz

10

Korzystanie cytatu

Unquote ma instrument umożliwiający uzyskanie F # podpis typu. Po prostu pobierz najnowszą wersję i dodaj odwołanie za pośrednictwem LINQPad do Unquote.dll, a następnie możesz zrobić np.

enter image description here

Jeśli jesteś zainteresowany, możesz szczyt na kod źródłowy dla realizacji FSharpNameType rozszerzenia: http://code.google.com/p/unquote/source/browse/tags/2.1.0/Unquote/ExtraReflection.fs#54.

Korzystanie FsEye

Kolejną przyjemną podejście byłoby użyć LINQPad za beta Custom Visualizer API osadzić FsEye do LINQPad (FsEye używa tego samego typu F # algorytm drukowania podpis jako koniec cytatu). Jest to również bardzo proste, wystarczy pobrać LINQPad beta, pobrać i odwołać się do FsEye.dll z najnowszej wersji FsEye, a następnie można to zrobić np.

enter image description here

+0

Ja ** kocham ** to środowisko, w którym miksowane są dane i metadane. Równie dobrze by mi się podobało w visual studio, zastępując ekspresję konkretnymi rezultatami funkcji, które piszemy ... – nicolas

+0

Brakujące obrazy!Bardzo frustrujące!!! :-) –

+1

Zamiast ściągać i uzupełniać bibliotekę dll ręcznie, ponieważ LinqPad beta obsługuje pakiety nuget, być może pakiet nugetów z biblioteki FsEye dll? – jbtule

1

Jeśli spojrzysz na kod kompilatora F # i zobaczysz, jak opcja -sig jest obsługiwana przez kompilator, myślę, że dostaniesz to, czego szukasz. Więcej o --sig opcji i podpisów tutaj:

Signatures (F#)

+0

Dziękuję za sugestię - dodałem podpisy do mojego pytania. Próba zagłębienia się w implementację kompilatora wydaje mi się przesadą, przepraszam. –

+0

Dlaczego po prostu nie użyć opcji '--sig' i nie zaprezentować pliku podpisu podczas prezentacji? –

+0

Myślałem, że pyta, jak to zrobić programowo. –

Powiązane problemy