【发布时间】:2021-07-19 21:45:27
【问题描述】:
在Rust 中,Option 枚举声明为:
pub enum Option<T> {
/// No value
#[lang = "None"]
#[stable(feature = "rust1", since = "1.0.0")]
None,
/// Some value `T`
#[lang = "Some"]
#[stable(feature = "rust1", since = "1.0.0")]
Some(#[stable(feature = "rust1", since = "1.0.0")] T),
}
我们知道Option 值可以通过以下方式创建:
Some("Apple")
问题
-
Some(T)和Some("Apple")的语法是什么?
貌似是个函数,但是没找到相关的源码。 -
当我尝试创建一个类似的枚举时,如:
pub enum Food<T> { Fruit(T), } impl<T> Food<T> { pub const fn unwrap(self) -> T { match self { Self::Fruit(val) => val, } } } fn x() { let a = Food::Fruit("apple"); println!("{}", a.unwrap()); }并得到错误:
error[E0493]: destructors cannot be evaluated at compile-time --> src/lib.rs:6:25 | 6 | pub const fn unwrap(self) -> T { | ^^^^ constant functions cannot evaluate destructors ... 10 | } | - value is dropped here是否可以创建这样的枚举?如果是这样,如何解决这些问题?
【问题讨论】:
-
去掉
const就可以了? -
您应该将您的问题分成两个单独的帖子。它们之间并没有真正的关系。
-
@kmdreko 第二个问题只是想弄清楚第一个问题问的是什么,如果可以回答第一个问题,那么可以忽略第二个问题。
-
@Herohtar 是的,删除
unwrap()上的const确实有效。 -
你使用的是EnumTuple,它暗示了一个元组构造函数doc.rust-lang.org/stable/reference/expressions/…