rust 的结构体可以继承吗?

RUST泛型

// 一个具体类型 `A`。
struct A;

// 在定义类型 `Single` 时,第一次使用类型 `A` 之前没有写 `<A>`。
// 因此,`Single` 是个具体类型,`A` 取上面的定义。
struct Single(A);
//            ^ 这里是 `Single` 对类型 `A` 的第一次使用。

// 此处 `<T>` 在第一次使用 `T` 前出现,所以 `SingleGen` 是一个泛型类型。
// 因为 `T` 是泛型的,所以它可以是任何类型,包括在上面定义的具体类型 `A`。
struct SingleGen<T>(T);

fn main() {
    // `Single` 是具体类型,并且显式地使用类型 `A`。
    let _s = Single(A);
    
    // 创建一个 `SingleGen<char>` 类型的变量 `_char`,并令其值为 `SingleGen('a')`
    // 这里的 `SingleGen` 的类型参数是显式指定的。
    let _char: SingleGen<char> = SingleGen('a');

    // `SingleGen` 的类型参数也可以隐式地指定。
    let _t    = SingleGen(A); // 使用在上面定义的 `A`。
    let _i32  = SingleGen(6); // 使用 `i32` 类型。
    let _char = SingleGen('a'); // 使用 `char`。
}

看到这个例子,struct Single(A); 为什么是圆括号,而不是花括号呢?
圆括号是什么意思?结构体的继承?还是元组?

阅读 4.2k
2 个回答

rust 结构体有三种:

  • 经典的 C 语言风格结构体(C struct)。
  • 元组结构体(tuple struct),事实上就是具名元组而已。
  • 单元结构体(unit struct),不带字段,在泛型中很有用。

标准的结构体 —— C struct

struct Person {
    name: String,
    age: i32,
    address: String,
}

简略的结构体 —— tuple struct

struct Person(String, i32, String);

最简略的结构体 —— unit struct

struct Person;
C struct 的屁股是不需要加 ; 分号的;但是另外两个是要加的

参考:

这叫做 tuple struct 。用起来跟一个 tuple 是类似的。struct 的成员没有名字。

struct

Tuple structs are similar to regular structs, but its fields have no names. They are used like tuples, with deconstruction possible via let TupleStruct(x, y) = foo; syntax. For accessing individual variables, the same syntax is used as with regular tuples, namely foo.0, foo.1, etc, starting at zero.
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进