Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust常量表达式可以使用默认值这样的特性吗?_Rust_Constants_Default - Fatal编程技术网

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::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},您甚至不需要函数。