小编Iza*_*ana的帖子

为另一个特征实现一个特征是什么意思?

我阅读了这个答案,但我仍然感到困惑。

  1. 你怎么解释impl B for dyn A {}

    trait A {
        fn method_a(&self) {
            println!("a");
        }
    }
    
    trait B {
        fn method_b(&self) {
            println!("b")
        }
    }
    
    impl B for dyn A {}
    
    impl A for i32 {}
    
    fn main() {
        let x: &dyn A = &10;
        x.method_b();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    操场

    我可以理解,impl A for i32 {}因为i32是具体类型。dyn A不是具体类型(未调整大小,不能按值传递),并且您不能声明 adyn A但只能声明 a &dyn A。我应该解释吗

    // x.method_b();
    (*x).method_b();
    
    Run Code Online (Sandbox Code Playgroud)

    因为*xdyn A …

traits rust

6
推荐指数
1
解决办法
934
查看次数

为什么 String 可以调用 Colorize 特征方法,而 String 却没有实现 Colorize

来自ColorizeTrait docString并没有实现它(而 &str 实现了它)。

fn blue(self) -> ColoredString
where
    Self: Sized, 
Run Code Online (Sandbox Code Playgroud)

但为什么String类型可以调用它的方法呢?

use colored::Colorize;

fn main() {
    let blue = "blue".to_owned().blue();
    println!("{}", blue);
}

Run Code Online (Sandbox Code Playgroud)

编辑

  • [未解决]怎样才能脱糖呢?(具体来说,要弄清楚是否发生了自动取消引用)

  • 幕后发生了什么?

对方法调用进行类型强制。String可以被&str强迫&*String

rust

2
推荐指数
1
解决办法
184
查看次数

KMP_AFFINITY 中的 K 是什么意思?

我刚刚从 OpenMP 学习了KMP_AFFINITY。谁能告诉我为什么它的名字以K开头?许多变量都始于KMP_英特尔 OpenMP 实现。它代表内核吗?

openmp

1
推荐指数
1
解决办法
754
查看次数

从可变借用的结构中可变借用字段

从借用规则来看:

  • 在任何给定时间,您可以拥有一个可变引用或任意数量的不可变引用。

下面,我有一个 Foo 结构(整个结构)的可变借用,这意味着我借用了该结构的每个字段。不过,我可以在功能上再借用一下它的领域demo。我怀疑我有两个可变引用x.a

#[derive(Debug)]
struct Foo {
    a: i32,
    b: i32,
}

fn demo(foo: &mut Foo) {
    // the `foo` is mutable borrow
    // should have exclusive access to all elements of Foo instance
    // However,
    let bar = &mut foo.a; // second ref to `x.a`
    *bar += 1;
    let baz = &foo.b;

    println!("{:?}", bar);
    println!("{:?}", baz);
}


fn main() {
    let mut x = Foo { a: 10, b: 1 };
    let foo …
Run Code Online (Sandbox Code Playgroud)

rust

1
推荐指数
1
解决办法
706
查看次数

标签 统计

rust ×3

openmp ×1

traits ×1