構造体や列挙体の列挙子がタプル形式の場合、それらの名前はデータ初期化用の関数のように動作する。この関数は通常の関数と同じように扱える。つまり、そのまま呼び出す事も、参照として持ちだしてから呼び出す事もできる。
fn main() {
let x_f = MyStructX;
let y_f = MyStructY;
let z_f = MyStructZ;
assert!(x_f() == MyStructX());
assert!(y_f(1) == MyStructY(1));
assert!(z_f(1, 2) == MyStructZ(1, 2));
}
#[derive(Eq, PartialEq)]
struct MyStructX();
#[derive(Eq, PartialEq)]
struct MyStructY(i32);
#[derive(Eq, PartialEq)]
struct MyStructZ(i32, i32);
fn main() {
let a_f = MyEnum::A;
let b_f = MyEnum::B;
let c_f = MyEnum::C;
assert!(a_f() == MyEnum::A());
assert!(b_f(1) == MyEnum::B(1));
assert!(c_f(1, 2) == MyEnum::C(1, 2));
}
#[derive(Eq, PartialEq)]
enum MyEnum {
A(),
B(i32),
C(i32, i32)
}
タプル形式における空のタプルと異なり、まったく中身の指定されない識別子では、関数としての利用はできない。