5
我實現使用DLR在C#語言解釋器,我有一些麻煩與三元運算符。在這一點上,我有基本的函數聲明/調用來實現,就像這樣:如何實現三元運算符在DLR
F := (x) -> x + 1
F(1) # returns 2
我已經沒有用一個函數體是一個表達式序列的問題 - 最後一個表達式的值總是返回,而且我確信所有的情況在解釋回報至少東西的副作用。我現在試圖實現三元運算符(?:)。表達式樹我的渲染看起來像這樣:
work = Expression.IfThenElse(
Expression.IsTrue(Expression.Convert(work, typeof(Boolean))),
trueExp,
falseExp);
其中trueExp和falseExp都是有效的表達式。
問題似乎是IfThenElse表達式沒有返回值,所以基本上即使trueExp和falseExp正在構建表達式樹,IfThenElse表達式的最終結果始終爲空。通過使用DLR實現三元運算符,有沒有辦法制作運行時函數並明確調用它? (即:?表達式,做了IfThenElse和真假子句返回的實際值)
我希望解析是一樣的東西:
F := (x) -> (x = 1) ? 4 : 5
F(1) #4
F(2) #5
但現在這個總是返回null當編譯成一個程序時,由於上述問題。
我會很感激任何幫助,這是很讓人頭疼的!
完美!謝謝 – Gakidou 2012-02-14 19:35:18
是否有可能效仿Expression.Condition與Expression.IfThenElse?即不是「回報? b:c'do'if(as)return b else return c;'? – 2013-05-07 07:23:18
@zespri:如果你想要做的就是返回一個值,當然。在那種情況下,他們是一樣的。顯然你不能在另一個表達式中使用IfThenElse *,因爲它是一個聲明。我個人覺得'返回一個? b:c;'但是更容易理解。 – 2013-05-07 13:24:56