gpt4 book ai didi

rust - 是否可以将 Self 限制为特征中的单元结构?

转载 作者:行者123 更新时间:2023-11-29 08:25:51 24 4
gpt4 key购买 nike

是否可以将 Self 限制为特征中的单元结构?

struct Error;
trait BadCreator
where
Self: Sized, // <<< I would like to restrict Self to unit structs
{
fn maybe_create_me(b: bool) -> Result<Self, Error> {
match b {
true => Ok(Self), // <<< This line doesn't compile
false => Err(Error),
}
}
}
error[E0423]: expected value, found self type `Self`
--> src/lib.rs:8:24
|
8 | true => Ok(Self),
| ^^^^ not a value
|
= note: can't use `Self` as a constructor, you must use the implemented struct

我希望能够像这样使用它:

struct Foo;
impl BadCreator for Foo {}

let b: Foo = Foo::maybe_create_me(true)?;

最佳答案

不,从 Rust 1.39 开始这是不可能的。


老实说,你的问题对我来说没有意义。如果你想确保你可以创建一个没有任何参数的值,然后要求通过一个创建一个没有任何参数的值的函数:

trait BadCreator: Sized {
fn create() -> Self;

fn maybe_create_me(b: bool) -> Result<Self, Error> {
match b {
true => Ok(Self::create()),
false => Err(Error),
}
}
}

或者使用 Default特点:

trait BadCreator: Default {
fn maybe_create_me(b: bool) -> Result<Self, Error> {
match b {
true => Ok(Self::default()),
false => Err(Error),
}
}
}

关于rust - 是否可以将 Self 限制为特征中的单元结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com