11
A
回答
9
很難回答這個問題是或否。
您可以刪除反引號和方括號。然後,你將有
type level2 = Debug | Info | Warning | Error
在最簡單的情況下,這種類型很相似,你level
類型。它有4個常量構造函數。
但是,在更復雜的情況下,類型是完全不同的。您的類型level
是polymorphic variant類型,比上面的level2
更靈活。的level
的構造可以出現在任何數目的不同類型的在同一範圍內的,並且level
參與了子類型關係:
# type level = [`Debug | `Info | `Warning | `Error]
# type levelx = [`Debug | `Info | `Warning | `Error | `Fatal]
# let isfatal (l: levelx) = l = `Fatal;;
val isfatal : levelx -> bool = <fun>
# let (x : level) = `Info;;
val x : level = `Info
# isfatal (x :> levelx);;
- : bool = false
這個例子的一點是,即使x具有鍵入level
,可以作爲治療儘管它也是levelx
型,因爲level
是levelx
的子類型。
像level2
這樣的非多態變體類型之間沒有子類型關係,事實上,在同一個作用域中,不能在多個這樣的類型中使用相同的構造函數名稱。
多態變體類型也可以是開放式的。這是一個很大的話題;如果你感興趣,你應該看到上面鏈接的OCaml手冊4.2節。
+1
afair,現在的可取名是「開放變種」 。 – ygrek
相關問題
- 1. 指定json的鍵有沒有引號有什麼區別?
- 2. 什麼使反引號和撇號之間有很大區別?
- 3. 反向引號和$()對於命令替換有什麼區別
- 4. Perl中的system,exec和反引號有什麼區別?
- 5. JS變量有什麼區別 - 有沒有美元符號?
- 6. Ruby--單引號和雙引號之間有什麼區別?
- 7. 豬的雙引號和單引號有什麼區別?
- 8. 沒有冒號就輸入語句有什麼區別?
- 9. 有什麼區別
- 10. 有什麼區別
- 11. 有什麼區別?
- 12. 有什麼區別?
- 13. 有什麼區別?
- 14. 有什麼區別
- 15. ....有什麼區別?
- 16. 有什麼區別?
- 17. 有什麼區別
- 18. 有什麼區別
- 19. 有什麼區別
- 20. 有什麼區別?
- 21. File.open()有沒有區塊有什麼區別?
- 22. 沒有parens反引號
- 23. SIGCLD和SIGCHLD信號有什麼區別?
- 24. 「interned」和「uninterned」符號有什麼區別
- 25. nohup和&符號有什麼區別
- 26. IND和NAN號碼有什麼區別
- 27. 有什麼區別`和$(Bash中有什麼區別?
- 28. 對象和引用有什麼區別?
- 29. MySQL索引定義,有什麼區別?
- 30. __weak和__block引用有什麼區別?
這是相關的(有點):http://stackoverflow.com/questions/1746743/extending-an-existing-type-in-ocaml/1747400#1747400 –