相关疑难解决方法(0)

为什么这个右值不会提升为参考中指定的左值?

防锈参考说:

赋值或复合赋值表达式的左操作数是左值上下文,一元借用的单个操作数也是如此.

[...]

在左值上下文中使用右值时,会创建并使用临时的未命名左值.

这种左值促销显然适用于借款:

let ref_to_i32 = &27;  // a temporary i32 variable with value 27 is created
Run Code Online (Sandbox Code Playgroud)

但它似乎不适用于任务(虽然引用说的是所有左值上下文,而不仅仅是借用):

27 = 28;   // error[E0070]: invalid left-hand side expression
Run Code Online (Sandbox Code Playgroud)

E0070错误描述未提及此右值促销.这是参考文献中的错误还是确实有某种方法可以通过赋值或复合赋值表达式触发rvalue促销?

还有第三种左值上下文,参考描述也不正确.只要存在带有a的模式,ref绑定到该模式的左值就是左值上下文.事实证明,促销适用于这种情况:

let ref x = 3;  // works
Run Code Online (Sandbox Code Playgroud)

显然,促销只对(复合)作业不起作用?

rvalue lvalue language-lawyer rust

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

错误“表达式左手无效”是什么意思?

我编写了这段代码,以查看将两个字符串传递给函数并将它们再次返回时会发生什么情况:

fn main() {
    let mut s3 = String::from("hello");
    let mut s4 = String::from("wolrd");

    (s3, s4) = take_n_giveback(s3, s4);

    println!("{0} and {1}", s3, s4);
}

fn take_n_giveback(x: String, y: String) -> (String, String) {
    (x, y)
}
Run Code Online (Sandbox Code Playgroud)

我收到一个没有帮助的错误:

fn main() {
    let mut s3 = String::from("hello");
    let mut s4 = String::from("wolrd");

    (s3, s4) = take_n_giveback(s3, s4);

    println!("{0} and {1}", s3, s4);
}

fn take_n_giveback(x: String, y: String) -> (String, String) {
    (x, y)
}
Run Code Online (Sandbox Code Playgroud)

传递单个字符串并返回时,此操作工作正常。

fn main() {
    let mut …
Run Code Online (Sandbox Code Playgroud)

ownership rust

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

标签 统计

rust ×2

language-lawyer ×1

lvalue ×1

ownership ×1

rvalue ×1