Rust常量表达式可以使用默认值这样的特性吗?
此代码给出一个错误:Rust常量表达式可以使用默认值这样的特性吗?,rust,constants,default,Rust,Constants,Default,此代码给出一个错误: #[派生(默认)] 结构A{ b:选择, c:选项, } 常数a:a=a{ b:没有, …默认值::默认值() }; error[E0015]:常量中的调用仅限于常量函数、元组结构和元组变量 -->src/lib.rs:9:7 | 9 |…默认值::默认值() | ^^^^^^^^^^^^^^^^^^ 在这个小例子中,这不是一个大问题,但是如果我有一个由多个实现Default特性的结构组成的结构,不能使用它至少会带来不便 虽然我可以写这篇文章,但它没有Def
#[派生(默认)]
结构A{
b:选择,
c:选项,
}
常数a:a=a{
b:没有,
…默认值::默认值()
};
error[E0015]:常量中的调用仅限于常量函数、元组结构和元组变量
-->src/lib.rs:9:7
|
9 |…默认值::默认值()
| ^^^^^^^^^^^^^^^^^^
在这个小例子中,这不是一个大问题,但是如果我有一个由多个实现Default
特性的结构组成的结构,不能使用它至少会带来不便
虽然我可以写这篇文章,但它没有Default
提供的灵活性:
impl A{
const fn new(b:选项)->Self{
A{b,c:None}
}
}
常数a:a=a::新建(无);
有什么方法可以避免这样做吗?不,在一个固定的环境中使用特征是不可能的。这一点仍在讨论中 另见:
Default::Default()
,因此您可以编写一个类似于const fn
Default的函数,并在常量中使用该函数:
struct A {
b: Option<()>,
c: Option<()>,
}
impl A {
const fn new() -> A {
A {
b: None,
c: None,
}
}
}
impl Default for A {
fn default() -> A {
// implementing using new() instead of #[derive]
// to avoid diverging implementations
A::new()
}
}
const a: A = A {
b: None,
..A::new()
};
结构A{
b:选择,
c:选项,
}
暗示{
常量fn new()->A{
A{
b:没有,
c:没有,
}
}
}
默认为{
fn default()->A{
//使用new()而不是#[派生]实现
//为了避免不同的实现
A::新的()
}
}
常数a:a=a{
b:没有,
…新的
};
?“但是那样的话,我就没有默认设置提供的灵活性了。”这是什么?@Stargateur不必像第二个答案所说的那样键入所有我不需要的字段(就像我的示例:p),你也可以使用
。默认设置A
与常量默认设置A:A=A{b:None,c:None}代码>,您甚至不需要函数。