热门问题
时间线
聊天
视角
單值類型
来自维基百科,自由的百科全书
Remove ads
在數理邏輯、計算機科學和類型論中,單值類型(unit type)是只允許1個值的數據類型。單值類型的基礎集(underlying set)是單元素集合。由於任何2個單元素集合同構,因而習慣稱「這個單值集合」( the unit type),不必考慮具體的值是什麼。也可以把單值類型視作0-元組,如無類型的積。
單值類型是範疇論中類型和有類型函數的終對象,不應與 zero或底類型混淆。後兩者允許no值,是範疇的始對象。類似的,布爾類型是有2個值的類型。
程式語言支持
- Haskell, Rust, Elm, 單值類型被稱作
(),其僅有的值也寫作(), 解釋為0元組。 - ML語言家族(包括OCaml, Standard ML, F#), 單值類型被稱作
unit,但其值寫作(). - Scala語言中,單值類型稱作
Unit,其值寫作(). - 在Common Lisp中,單值類型名字是NULL,其取值為NIL。不要與類型NIL混淆,該類型是底類型。
- Python中的類型
NoneType,僅有的取值為None. - Swift中單值類型是
Void或(),其值寫作() - Java語言中單值類型為
Void,其值寫作null. - Go語言中單值類型為
struct{},其值寫作struct{}{}. - PHP中單值類型為null,其值寫作NULL
- JavaScript中,類型
Null(取值為null)和類型Undefined(取值為undefined)都是原生單值類型 - Kotlin中單值類型為
Unit,其值為Unit對象 - Ruby中單值類型為
NilClass,其值寫作nil - C++17中單值類型為
std::monostate。更早版本可自定義空結構struct empty{}.
Remove ads
C語言, C++, C#, D, void用於指示函數不返回任何有用結果,或函數無參數。C語言中的單值類型在概念上類似於空struct,但C語言不允許無成員的結構(C++允許)。
真正的單值類型與void類型的使用區別,可以參見下例:
void f(void) {}
void g(void) {}
int main(void)
{
f(g()); // compile-time error here
return 0;
}
C++允許空類作為單值類型:
class unit_type {};
const unit_type the_unit;
unit_type f(unit_type) { return the_unit; }
unit_type g(unit_type) { return the_unit; }
int main()
{
f(g(the_unit));
return 0;
}
void類型不用占存儲。但單值類型在結構或類中是佔一定空間存儲的。
Remove ads
參見
參考文獻
- Pierce, Benjamin C. Types and Programming Languages. MIT Press. 2002: 118–119. ISBN 0-262-16209-1.
- nLab的unit type條目
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads