我对锈病很陌生,我有以下的工作代码。但我不认为我所做的是最好的方法。我在寻找关于这段简单代码的见解。
我有一个简单的结构,它保存一些数据:
struct BlobRef {
hashname: String,
}
impl BlobRef {
fn hashname(self) -> String {
self.hashname
}
}还有一个函数调用。别担心source: &[u8],它会有时间发光的。
fn write(bref: BlobRef, source: &[u8]) -> io::Result<String> {
let hashname = bref.hashname();
match fs::create_dir_all(&hashname) {
Ok(_) => Ok(hashname),
Err(e) => Err(e)
}
}我需要分配另一个作用域变量hashname,以停止编译器抱怨“使用移动变量”。这是习语吗?
发布于 2015-06-22 19:31:36
我相信,这不是一个习惯性的问题;你需要写什么取决于你想要实现什么。
使用by值self并将String从结构中移出,在过程中使用它(这就是您的示例所做的)在某些上下文中是完全合法的,并且完全取决于您的用例。
另一方面,如果您只想获得字符串的值以便在某个地方读取它(如您的示例所示),最好返回一个字符串片段:
impl BlobRef {
fn hashname(&self) -> &str {
&self.hashname
}
}现在,您的第二段代码可能如下所示:
fn write(bref: &BlobRef, source: &[u8]) -> io::Result<String> {
let hashname = bref.hashname();
match fs::create_dir_all(hashname) {
Ok(_) => Ok(hashname.into()),
Err(e) => Err(e)
}
}这需要额外的分配,以便将String从&str中提取出来。
但是,如果BlobRef的唯一目的是将字符串传递给该函数,那么您的原始方法是完全正确的。
https://stackoverflow.com/questions/30985803
复制相似问题