我正在浏览微软的Rust教程,它是关于
实现copy_and_return
函数,以便返回对插入向量中的值的引用
这里给出了解决方案,但它与我的不同之处在于它使用了
// standard solution
fn copy_and_return<'a>(vector: &'a mut Vec<String>, value: &'a str) -> &'a String {
vector.push(String::from(value));
vector.get(vector.len() - 1).unwrap()
}
// my solution
fn copy_and_return<'a>(vector: &'a mut Vec<String>, value: &'a str) -> &'a str {
vector.push(String::from(value));
return value; // simply return value
}
fn main() {
let name1 = "Joe";
let name2 = "Chris";
let name3 = "Anne";
let mut names = Vec::new();
assert_eq!("Joe", copy_and_return(&mut names, &name1));
assert_eq!("Chris", copy_and_return(&mut names, &name2));
assert_eq!("Anne", copy_and_return(&mut names, &name3));
assert_eq!(
names,
vec!["Joe".to_string(), "Chris".to_string(), "Anne".to_string()]
)
}
除了返回类型之外,我的和标准解决方案之间的另一个区别是,我只是简单地返回了参数值
,而标准解决方案使用复杂方式vector.get(vector.len() - 1).unwrap()
)。
我想知道我的解决方案是否有任何问题,本教程采取了另一种方式?
虽然@Masklin为我的问题提供了一个很好的答案,但它有点特定于我给出的示例,但没有直接解决标题<code>之间的区别
基本上,String
包装并管理动态分配的 str 作为后备存储。由于无法调整 str 的大小,因此 String 将动态分配/解除分配内存。一个
锈书的第4.3章也有帮助
我想知道我的解决方案是否有任何问题,本教程采取了另一种方式?
我不认为这本身有什么问题,你的名字甚至可能更符合函数名,这取决于它是如何解释的:你应该复制并返回原始的,还是复制并返回副本?你的是第一选择,他们的是第二选择。
生命周期使它变得无关紧要,但这确实对程序行为产生了影响:在“官方”解决方案中,结果是对插入到< code>Vec中的值的引用,这意味着只要向量存在(至少假设向量没有被修改),它就将是“活的”。
如果替换值,您可以看到差异:
虽然请注意,官员也可以返回
fn copy_and_return<'a>(vector: &'a mut Vec<String>, value: &'_ str) -> &'a str {
vector.push(String::from(value));
vector.get(vector.len() - 1).unwrap()
}
官方解决方案很难通过例如
vector.get(vector.len() - 1)
是一种复杂的书写方式
vector.last()
但我不能说,他们可能只是不想用高级API之类的东西来压倒读者。
问题内容: 我无法理解以下文本…这是否意味着空的构造函数?为什么拥有两个不同的版本很重要? https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html 在Java虚拟机级别,每个构造函数(第2.12节)都作为具有特殊名称的实例初始化方法出现。该名称由编译器提供。因为该名称不是有效的标识符,所以不能直接用Java编程语言编写的程序中使
问题内容: 我试图破译以下功能: 我从http://blog.danlew.net/2014/09/15/grokking-rxjava- part-1/ 获得了一个很好的rxjava简介,但是它只是顺便提到了Observer,说您将在大多数情况下使用Subscriber从Observable发射到消费项目的时间。 有人可以向我解释 什么是观察者? 观察者与订户有何不同? 上面的代码段是做什么的?
createOrReplace eTempView和as函数别名火花sql查询使用的区别是什么? 我试图理解这两种方法之间的区别。
本文向大家介绍createElement与cloneElement两者有什么区别?相关面试题,主要包含被问及createElement与cloneElement两者有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 1.第一个参数不一样 React.cloneElement( element, [props], [...children] ) React.createElement( type
问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型
> -返回类型是实体和 -返回类型为实体 过程1需要一个额外的步骤,使用optional.get()从optional中获取实体。有什么不同吗?你推荐哪一种?