【发布时间】:2018-10-06 06:11:40
【问题描述】:
从the Rust book's chapter on ownership 开始,可以通过转移所有权或使用可变或不可变引用将不可复制的值传递给函数。当您转移一个值的所有权时,它不能再在原始函数中使用:如果您愿意,您必须将其返回。当你传递一个引用时,你借用了这个值并且仍然可以使用它。
我来自默认情况下值不可变的语言(Haskell、Idris 等)。因此,我可能根本不会考虑使用引用。在两个地方具有相同的值对我来说看起来很危险(或者至少很尴尬)。既然引用是一个特性,那么使用它们肯定是有原因的。
在某些情况下我应该强迫自己使用引用吗?这些情况是什么,为什么它们是有益的?还是他们只是为了方便而默认传递所有权是可以的?
【问题讨论】:
-
同时在两个地方具有相同的值看起来令人困惑 [...] 可变引用尤其看起来非常危险。 您还使用过哪些其他编程语言?其中大量 中的大多数始终隐含地对大多数值使用“可变引用”。您认为大多数语言都是危险的吗?
-
谈到什么时候拥有资源,什么时候借用资源,往往是软件设计的问题,会引起各种意见。像 Shepmaster 一样,我也不理解您对引用的混淆。也许将问题缩小到一个例子会有所帮助?
-
@Shepmaster 是的,我个人愿意。我来自默认情况下值不可变的语言(Haskell、Idris 等)。因此,我可能根本不会考虑使用引用。但它们是一个特征,所以必须有一个原因。因此,我要问的是:在某些情况下我应该强迫自己使用引用吗?这些情况是什么,为什么它们是有益的?还是他们只是为了方便而默认传递所有权是可以的?
-
@Stargateur 我已经编辑了这个问题,你怎么看?
-
“在两个地方有相同的值对我来说看起来很危险(或者,至少,很尴尬)。”如果你将相同的值传递给两个不同的函数一种纯粹的函数式编程语言,编译器/解释器很可能只是在内部通过引用共享它,这仍然应该是安全的,因为值是不可变的。您能否更好地表达您对 Rust 中存在多个不可变引用的担忧?
标签: reference rust move-semantics borrowing