Q
`B是什麼意思?
4
A
回答
6
以`B
這樣的反引號爲前綴的標識符是polymorphic variant類型的構造函數。它類似於一個代數類的構造函數:
type abc = A | B | C
但是,您可以使用多態變形值沒有聲明,一般他們比一般的代數類型靈活得多。折中的是,他們使用起來也有點棘手。
有一件事人們使用它們作爲簡單命名的值,就像C或enum
值,更準確地說,像Lisp中的原子。您可以使用普通的代數類型,但是您需要謹慎地維護它們的定義並防止重複。使用多態變體時,您不需要執行其中的任何一個。您可以在不聲明它們的情況下使用它們,並且構造函數不必是唯一的(兩種不同的類型可以具有相同的構造函數)。
多態性變異的構造也可以帶參數,如代數構造函數可以。因此,您也可以編寫(`B 77)
,這是一個帶有單個參數int
的構造函數。
這是一個非常大的話題 - 看到OCaml的手冊上面鏈接部分獲取更多細節。
3
這是一個多態性變異。從documentation:
1.4節中提供的變體是構建數據結構和算法的強大工具。但是,在模塊化編程中它們有時缺乏靈活性。這是因爲每個構造函數都保留一個與獨特類型一起使用的名稱。一個不能在另一個類型中使用相同的名稱,或者認爲某個類型的值屬於某個具有更多構造函數的其他類型。
隨着多態性變異,這種原始的假設被刪除。也就是說,變體標籤不屬於任何類型,類型系統將根據其使用情況檢查它是否爲允許值。在使用變體標籤之前,您無需定義類型。變體類型將針對其每個用途獨立推斷。
相關問題
- 1. 「B(int b = 0):b(b){}」是什麼意思?
- 2. `size * = b - a`是什麼意思?
- 3. 數據( - >)a b是什麼意思?
- 4. `a> b`是什麼意思?
- 5. 操作c = a +++ b是什麼意思?
- 6. 「int * const const * b」是什麼意思?
- 7. a >> = b是什麼意思?
- 8. `a + = b + = c`是什麼意思?
- 9. 「特質A <:B」是什麼意思?
- 10. format(a,str(b))是什麼意思?
- 11. 「返回b」是什麼意思?
- 12. 是什麼意思:是什麼意思?
- 13. b = a-> b是什麼意思在一類列表中?
- 14. #define,EQ(a,b)((a)==(b))是什麼意思?
- 15. 什麼`... |類型聲明中的b - > c是什麼意思?
- 16. scala - 什麼地圖[(A,B)]是什麼意思?
- 17. %{}是什麼意思?
- 18. '#'是什麼意思?
- 19. 「?」是什麼意思?
- 20. #{...}是什麼意思?
- 21. || =是什麼意思?
- 22. @是什麼意思
- 23. $$ $$是什麼意思?
- 24. `/ * @`是什麼意思?
- 25. 「=」是什麼意思
- 26. + =是什麼意思?
- 27. {..} [..]是什麼意思?
- 28. 什麼是:!:意思?
- 29. @ []是什麼意思?
- 30. 什麼是「||」意思?