首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >习语借用

习语借用
EN

Stack Overflow用户
提问于 2015-06-22 17:04:52
回答 1查看 112关注 0票数 2

我对锈病很陌生,我有以下的工作代码。但我不认为我所做的是最好的方法。我在寻找关于这段简单代码的见解。

我有一个简单的结构,它保存一些数据:

代码语言:javascript
复制
struct BlobRef {
    hashname: String,
}

impl BlobRef {
     fn hashname(self) -> String {
         self.hashname
     }
}

还有一个函数调用。别担心source: &[u8],它会有时间发光的。

代码语言:javascript
复制
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,以停止编译器抱怨“使用移动变量”。这是习语吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 19:31:36

我相信,这不是一个习惯性的问题;你需要写什么取决于你想要实现什么。

使用by值self并将String从结构中移出,在过程中使用它(这就是您的示例所做的)在某些上下文中是完全合法的,并且完全取决于您的用例。

另一方面,如果您只想获得字符串的值以便在某个地方读取它(如您的示例所示),最好返回一个字符串片段:

代码语言:javascript
复制
impl BlobRef {
     fn hashname(&self) -> &str {
         &self.hashname
     }
}

现在,您的第二段代码可能如下所示:

代码语言:javascript
复制
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的唯一目的是将字符串传递给该函数,那么您的原始方法是完全正确的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30985803

复制
相关文章

相似问题

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