什么是Rust的汽车特性?

时间:2018-04-07 18:53:32

标签: rust

尝试解决Trait bound Sized is not satisfied for Sized trait中描述的问题,我发现以下代码会出现以下错误:

@Entity
public class Competition
@ManyToOne
public List<Participation> participation;

@Entity
public class Participation
@ManyToOne
public List<Team> team;

@Entity
public class Team
private String name;
trait SizedTrait: Sized {
    fn me() -> Self;
}

trait AnotherTrait: Sized {
    fn another_me() -> Self;
}

impl AnotherTrait for SizedTrait + Sized {
    fn another_me() {
        Self::me()
    }
}

Rust Book根本没有提到error[E0225]: only auto traits can be used as additional traits in a trait object --> src/main.rs:9:36 | 9 | impl AnotherTrait for SizedTrait + Sized { | ^^^^^ non-auto additional trait

Rust中的自动特性是什么?它与非自动特征有何不同?

1 个答案:

答案 0 :(得分:20)

自动特征是非常名称 1 选择加入,内置特征(OIBIT)的新名称。

这是一个不稳定的特性,除非它们选择退出或包含不实现特征的值,否则会自动为每种类型实施特征:

#![feature(optin_builtin_traits)]

auto trait IsCool {}

// Everyone knows that `String`s just aren't cool
impl !IsCool for String {}

struct MyStruct;
struct HasAString(String);

fn check_cool<C: IsCool>(_: C) {}

fn main() {
    check_cool(42);
    check_cool(false);
    check_cool(MyStruct);

    // the trait bound `std::string::String: IsCool` is not satisfied
    // check_cool(String::new());

    // the trait bound `std::string::String: IsCool` is not satisfied in `HasAString`
    // check_cool(HasAString(String::new()));
}

熟悉的示例包括SendSync

pub unsafe auto trait Send { }
pub unsafe auto trait Sync { }

Unstable Book中提供了更多信息。

1 这些特征既不是选择性的(它们是选择性的)也不一定是内置的(用户代码每晚使用它们)。在他们名下的5个单词中,有4个是彻头彻尾的谎言。