首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将表达式赋值给变量与将变量内联到另一个表达式之间有什么区别?

将表达式赋值给变量与将变量内联到另一个表达式之间有什么区别?
EN

Stack Overflow用户
提问于 2017-04-29 10:14:21
回答 1查看 105关注 0票数 2

我在Rust中有以下代码:

代码语言:javascript
运行
复制
fn send_message(_: &[u8]) {}

let args: Vec<String> = std::env::args().collect();
let string_message = args[1..].join(" ") + "\nEND\n";
let socket_message = string_message.as_bytes();

send_message(&socket_message);

这个很管用。但是,我希望避免在那里使用string_message变量,所以我只是在socket_message的声明中内联了这个表达式:

代码语言:javascript
运行
复制
let args: Vec<String> = env::args().collect();
let socket_message = (args[1..].join(" ") + "\nEND\n").as_bytes();

send_message(&socket_message);

铁锈并不认为这两个片段是相同的,尽管!

它给出了这个错误:

代码语言:javascript
运行
复制
error: borrowed value does not live long enough
  --> <anon>:7:70
   |
7  |     let socket_message = (args[1..].join(" ") + "\nEND\n").as_bytes();
   |                          ---------------------------------           ^ temporary value dropped here while still borrowed
   |                          |
   |                          temporary value created here
...
10 | }
   | - temporary value needs to live until here
   |
   = note: consider using a `let` binding to increase its lifetime

我相信我遗漏了一些与借阅检查程序有关的东西,但我甚至无法理解它可能是什么,因为我期望一个临时的值,即使没有直接分配,也不会与借款有任何关系?!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-29 10:40:12

正如编译器告诉您的那样:

代码语言:javascript
运行
复制
= note: consider using a `let` binding to increase its lifetime

..。let绑定可以增加值的生存期。表达式args[1..].join(" ") + "\nEND\n"创建一个类型为String的值。在语句中创建的值不会超过该语句,除非它们被命名(带有let绑定)或是rvalue promoted。后一种情况在这里不适用,而且由于您没有命名您的值,所以它不会超过父语句。通常情况下,这并不是真正的问题,但是如果您想稍后引用指定的值,则会引用一些死掉的值。因此,借阅者就会抱怨。

在您的例子中,有两种可能性--

  1. 内联表达式足以使您不引用语句之外的值: 设args: Vec = env::args().collect();send_message(&(args1...join(“") +”\nEND\n“).as_bytes(); 正如您所看到的:语句中仍然有临时字符串,但这很好,因为我们只在语句中引用它。
  2. 使用let绑定来增加值的生存期,就像在第一个示例中所做的那样。您仍然可以缩短代码一行,如下所示: 设args: Vec = env::args().collect();string_message = args1...join(“") + "\nEND\n";send_message(string_message.as_bytes());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43694366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档