13
A
回答
20
這兩種類型非常相似,但它們的表現方式不同。
報價設計的功能更強大。例如,
foo a b
將表示爲一系列應用程序App(App(foo, a), b)
引用可以表示一些只在F#中可用的構造,並且使用表達式樹可以隱藏它們。例如
let rec
聲明有Expr.LetRecursive
語句首次在.NET 3.0中引入。當時表達式樹只能表示C#表達式,因此無法輕鬆捕獲所有F#結構(引用可以捕獲任何F#表達式,包括命令式表達式)。
報價也被設計成使用遞歸很容易處理。
ExprShape
模塊包含的模式允許您僅處理4種情況下的所有可能的引用(這比在C#中使用數十種方法實現訪問者模式要容易得多)。
當你有一個F#報價,則可以使用FSharp.Quotations.Evaluator轉換成C#表達式樹。如果您使用某些預計來自F#的表達式樹的.NET API,這非常有用。據我所知,沒有任何翻譯相反。
相關問題
- 1. 使用代碼引用構建AST與表達式樹
- 2. Eval()和表達式代碼
- 3. 將表達式樹直接應用於列表的代碼
- 4. 表達式樹和PropertyDescriptor
- 5. iQueryable和表達式樹
- 6. 表達式樹vs IL.Emit用於運行時代碼專業化
- 7. 表達式樹
- 8. 從表達式樹訪問索引器
- 9. 表達式樹引發錯誤
- 10. 使用表達式樹
- 11. 轉換lambda表達式表達式樹
- 12. Java表達式樹
- 13. C表達式樹#
- 14. lambda表達式樹
- 15. LINQ表達式樹
- 16. 如何將此代碼轉換爲表達式樹?
- 17. 如何創建表達式樹 - 僞代碼
- 18. 使用表達式樹的另一種表達樹
- 19. 代碼匹配規則的正則表達式前向引用
- 20. XPath表達式中的「代碼重用」
- 21. LINQ表達式樹和Monotouch鏈接器
- 22. 局部變量和表達式樹
- 23. HTML編碼代碼表達式
- 24. 用樹表示的算術表達式
- 25. 傳引用和指針lambda表達式
- 26. Lisp代碼(s表達式)格式化
- 27. 問題與使用Lambda表達式和表達式加入符樹
- 28. 用布爾表達式解析表達式樹
- 29. 用表達式樹構建lambda表達式
- 30. 在表達式樹中調用lambda表達式