我阅读了这个答案,但我仍然感到困惑。
你怎么解释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)
因为*x是dyn A …
来自ColorizeTrait doc,String并没有实现它(而 &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
我刚刚从 OpenMP 学习了KMP_AFFINITY。谁能告诉我为什么它的名字以K开头?许多变量都始于KMP_英特尔 OpenMP 实现。它代表内核吗?
从借用规则来看:
下面,我有一个 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)