在读的时候如何借用可变引用而不将其传递给函数?,OP 的功能如下:
fn deref<'a, 'b: 'a, T>(t: &'a mut &'b mut T) -> &'a mut T {
*t
}
这对我来说很有意义。然而,他们也指出,正文中的显式取消引用*
不需要:
fn deref<'a, 'b: 'a, T>(t: &'a mut &'b mut T) -> &'a mut T {
t
}
这可以编译,我不知道为什么。我熟悉自动取消引用,但我的印象是只发挥功能论点, not 返回值.
正在阅读相关文档,似乎Deref
转换总是根据需要发生多次 - 无论何时都需要。唯一真正时髦的额外技巧Deref
拉动的是它也能发挥神奇作用self
论据。
以下代码片段均有效 - 并且此处的表达式绝对不限于参数或返回值。
// &&&&1 gets dereferenced to &i32 from &&&&i32
let x: &i32 = &&&&1;
let x: (&i32,) = (&&&&1,);
这类事情唯一剩下的问题是Deref
仅适用于表单类型&U
,所以像&1
永远不能被强迫&i32
from i32
, 即使&&1
可以被胁迫&&i32
to &i32
.
作为旁注,我意识到类型归属有点特殊,但看起来Deref
那里不进行转换。我不确定这是否是设计使然,或者我是否只是误解了某些东西。下列doesn't work.
#![feature(type_ascription)]
// ....
let x = &&1i32: &i32;
基于这条评论(以及它起源的非常相关的线程),它看起来像这样is只是类型归属问题。目前看来,类型归属已经实现without强制,但几乎每个人都同意情况不应该如此(事实上,类型归属的良好用例之一是提示编译器要应用哪些强制)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)