下面是一段 Scala3 的代码:
var foo: Int | String = "abc"
foo match {
case i: Int => println("i32")
case s: String => println("str")
}
这段代码定义的 foo 可以是 Int 或 String 类型,并且可以很方便地根据类型模式匹配。
在 Rust 中,也有类似的操作吗?我尝试用 union type 去模拟这种操作:
enum Sum {
i32, String
}
fn main() {
let a: Sum = 1i32;
}
获得编译错误:
error[E0308]: mismatched types
--> src/main.rs:5:18
|
5 | let a: Sum = 1i32;
| --- ^^^^ expected enum `Sum`, found `i32`
| |
| expected due to this
error: aborting due to previous error; 1 warning emitted
是我错误地理解了 union type 吗?可是 Option 类型就是用 enum 实现的,为什么它就可以呢:
let foo: Option<i32> = None;
我应如何正确定义并运用 tagged union type 呢?
1
共 2 条评论, 1 页
评论区
写评论感谢解答!这正是我想要的!
--
👇
chinagxwei: ```rust enum Sum { Int(i32), String(String), }
fn main() { let foo = Sum::String(String::from("abc")); match foo { Sum::Int() => println!("i32"), Sum::String() => println!("str") } }
这是否是你想要的?