() 是rust中的unit type,该类型是zero-size的,并且有一个唯一的值:()

kotlin中也有一个类似的类型,就叫做Unit,并且它的唯一值就是Unit(一个Object)。

unit type 和 c 语言中的void有点类似。在 c 中,当一个函数不需要返回值时,可以将返回值声明为void。类似的,在rust中,如果我们的函数不需要返回值时,可以声明为返回(),实际上当我们没有声明返回值时,默认就是返回()

1
fn no_return(){}

实际上等价于

1
fn no_return()->(){}

在kotlin中,当我们不需要返回值时,也是将其声明为返回Unit

然而,rust中的()和c中的rust还是有一些区别的,()有一个唯一值,就是(),但是void并没有值。

rust 中还有一个特殊的类型 !,该类型没有值,当一个类型的返回值声明为! 时,表明该函数不会返回。

rust中,一切都可以认为是expression,当一个expression没有返回一个值时,实际上返回的是(),比如:

1
2
3
fn hello_rust() -> (){
println!("hello, rust!");
}

rust中以;结尾的是statement,其值是()

()用在很多场合中,比如:

  • 当一个Option或者Result并不关心返回值时,可以使用Option<()>或者Result<(), Box<dyn Error>>
  • HashSet<T>实际上就是HashTable<T, ()>
  • 比如在trait object的声明中:

    1
    2
    3
    4
    pub struct TraitObject {
    pub data: *mut (),
    pub vtable: *mut (),
    }

    当我们需要表示一个raw pointer,但是并不关心其实际的类型时,就可以使用*mut ()或者*const (),类似于c中的void*const void*