add
neden sub
neden bir istisna atar bilen var mı? Ve bu bir böcek mi?'Satır içi' ve tırnak değerlendirmesini kullanırken (+) ve (-) arasındaki tutarsız davranış
open Microsoft.FSharp.Linq.QuotationEvaluation
let inline add x = x + x
let inline sub x = x - x
let answer = <@ add 1 @>.Eval() // 2, as expected
let answer2 = <@ sub 1 @>.Eval() // NotSupportedException
Not satır içi anahtar sözcüğü olmadan özel durum değildir (ancak kod jenerik değildir) alıntılar kullanırken Ayrıca istisna sadece atılır. Normal değerlendirme iyi çalışıyor.
Teşekkür
Düzenleme: Bu soru için basitleştirilmiş kod örneği
PowerPack en kullanmamaya çalışın değerlendirme yöntemleri Eğer gerçekten gerçekten ihtiyacınız varsa, teklifleri değerlendirmenin başka yolları da var: Örneğin, Stephen Swensen'in Unquote'u (http://code.google.com/p/unquote/) –
@Ramon - ciro ve Unquote'un değerlendiricisinin bir çok senaryoda daha iyi bir seçenek olabileceğine katılıyorum (daha hızlı derlenmemiş değerlendirme, daha fazla kotasyon kalıplarını destekler, Silverlight 4'ü destekler, daha basit olması sayesinde daha az buggy destekler), işaret etmem gerek Bu sorunun herhangi bir değerlendirme motorunun ele alabileceğinden daha derin olduğunu ve Unquote'un değerlendiricisinde de görülebilir: “NoDynamicInvocation” operatörüne “zahmetsiz çağrı” derleme zamanında gömülür ve etrafta işlenemez. –
Temelde aynı sorun için bir süre önce PowerPack projesinde bir hata yaptım (gerçi bunu anlamasam da - o anda sorun): http: //fsharppowerpack.codeplex.com/workitem/5882, ama şimdi bunun derleyici ekibine doğrudan bildirilmesi gereken bir şey olduğuna inanıyorum. –