2012-03-28 11 views
9

bir F # Interactive Shell (FSI), çıkarsama yoluyla ifade tipini (signature) kullanıyorsa değeri ile birlikte konsola yazdırılır:FSI'ye benzer kendi kodumda F # türü imza nasıl oluşturulur?

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

Nasıl kendi kodunda, mesela aynı davranışı taklit edebilmektedir Bir F # ifadesi için türetilmiş türleri almak nasıl?

Herhangi bir F # ifadesini dinamik olarak değerlendirmemize gerek yok, ifadeler derleme zamanında biliniyor ve benim (statik) F # kodunun bir parçasıdır. F # demolarım için LINQPad'daki FSI çıktısını taklit edebilmek için bu özelliğe ihtiyacım var.

+0

, neden hem öncesinde-of-time FSI aracılığıyla çalışmaz? – pblasucci

+0

@pblasucci Canlı kodlama için LinqPAD kullanıyorum ve F # ile mükemmel şekilde çalışıyor. İfade için bir imzayı göstermem gerektiğinde FSI'ya geçersek çok fazla zaman kaybı olur. Ama bunu bir seçenek olarak tutuyorum, teşekkürler! –

+0

@AlexanderGalkin Can LinqPAD bir kabuk komutu yürütmek mi? Fsc komutunu --sig bayrağıyla dışarıda bırakıp çalıştırabilir ve üzerinde çalışmakta olduğunuz dosyayı iletebilirsiniz. –

cevap

10

unquote

Unquote kullanma tip F # imzasını almak için bir tesis var. Sadece en son sürümü indirin ve Unquote.dll dosyasına LINQPad aracılığıyla bir referans ekleyin, ardından ör. İlginizi çekiyorsa

enter image description here

, sen FSharpNameType uzatma uygulanması için kaynak koduna zirve edebilirsiniz: http://code.google.com/p/unquote/source/browse/tags/2.1.0/Unquote/ExtraReflection.fs#54. (FsEye Alıntı sonu aynı F # tipi imza baskı algoritması kullanır) LINQPad içine FsEye gömmek için LINQPad beta Custom Visualizer API kullanmak olacaktır FsEye

Başka temiz bir yaklaşım kullanarak

. Bu da çok basit, yapmanız gereken tek şey LINQPad beta indirmek, FsEye.dll en son sürümü FsEye.dll indirmek ve referans, daha sonra e. ifadeler öncesinde-of-time biliniyorsa

enter image description here

+0

Ben ** bu verileri ve meta verileri karıştırma ortamını seviyorum. Görsel stüdyonun içinde onları eşit bir şekilde seveceğim, yazdığımız fonksiyonların somut sonuçlarını elde etmek için ifade değiştirme yapıyor ... – nicolas

+0

Kayıp görüntüler!Çok sinir bozucu! :-) –

+1

LinqPad beta nuget paketleri, belki FsEye dll bir nuget paketi desteklediğinden, elle bir dll indirmek ve ref yerine,? – jbtule

1

F # derleyici koduna bakarsanız ve --sig seçeneğinin derleyici tarafından nasıl ele alındığını görürseniz, aradığınız şeyi size ulaştırır. Burada --sig seçeneği ve imzalar hakkında daha fazla bilgi:

Signatures (F#)

+0

Öneriniz için teşekkür ederim - Sorularıma imzaları ekledim. Derleyici uygulaması içine girmeye çalışmak benim için bir overkill gibi görünüyor, üzgünüm. –

+0

Neden '--sig' seçeneğini kullanmıyor ve demolar sırasında imza dosyasını sunmuyorsunuz? –

+0

Bu program aracılığıyla nasıl yapılacağını sorduğunu düşündüm. –

İlgili konular