是否可以在Rust中扩展一个结构体?[duplicate]

r1wp621o  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(165)

此问题在此处已有答案

Is it possible for one struct to extend an existing struct, keeping all the fields?(5个答案)
昨天关门了。
我对Rust不是很感兴趣,当我需要检查是否有可能使用它的类型系统做一些有趣的事情时,我会研究它。我提出了一个问题,是否有可能将以下用TS编写的类型定义转换为Rust。

type Data = {
    path: String
    name: String
}

enum Type {
    CSV,
    JPG,
    PNG
}

type CSV = Data & {
    type: Type.CSV
}

type JPG = Data & {
    type: Type.PNG
}

type PNG = Data & {
    type: Type.PNG
}

// To avoid conflicts with the already reserved type File
type MyFile = CSV | PNG | JPG

我一直在谷歌上搜索一些东西,比如是否有可能在Rust中扩展结构体,不幸的是没有找到任何符合我好奇心的东西。

7kqas0il

7kqas0il1#

不,在Rust中不可能扩展结构。
尝试在这个Typescript示例和等价的Rust之间进行直接转换无论如何都不符合习惯。您可能希望将其结构化为如下形式:

enum Kind {
    Csv,
    Jpg,
    Png,
}

struct MyFile {
    kind: Kind,
    path: String,
    name: String,
}

或类似于:

struct Data {
    path: String,
    name: String,
}

enum MyFile {
    Csv(Data),
    Jpg(Data),
    Png(Data),
}

这取决于路径/名称与文件类型的耦合。

相关问题