什么允许函数在返回参数时隐式取消引用参数?

2023-12-15

在读的时候如何借用可变引用而不将其传递给函数?,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(使用前将#替换为@)

什么允许函数在返回参数时隐式取消引用参数? 的相关文章

随机推荐

  • Powershell 在空文件夹上比较对象

    我正在编写一个简单的 DLL 复制脚本来帮助我的开发团队设置他们的本地环境 我检查 build devdrop 文件夹并获取 DLL 文件列表 然后 我查看本地文件夹并复制所有较新的 DLL 我的问题是当本地文件夹为空时 即脚本第一次运行
  • Scala Akka HTTP 转换参数为 java.time.ZonedDateTime

    我正在使用 Akka HTTP 在 Scala 中 开发 REST 服务 我希望将传入 http get 请求的参数转换为 ZonedDateTime 类型 如果我尝试使用 String 或 Int 但使用 ZonedDateTime 类型
  • 从 NetworkStream 读取特定数量的字节

    我正在尝试从网络流中读取已知长度的消息 我有点期待NetworkStream Read 将等待返回 直到我给它的缓冲区数组已满 如果不是 那么这样做的意义何在 ReadTimeout财产 我用来测试我的理论的示例代码 public stat
  • Haskell 打印字符串标准输出

    我需要打印 powerset 中的元素 现在我的代码的输出是这样的 a ab b x xy xyz xz y yz z 但是 我需要输出不带引号 如下所示 a ab b x xy xyz xz y yz z 这就是我所拥有的 我该如何修复它
  • Rails:如何在 Heroku 上使用系统 zip 从 xml 模板制作 docx?

    我在本地工作 将模板文件存储在 Rails root tmp using system cd tmp template zip r filename 压缩文件 将 docx zip 存档 发送到 S3 然后发送到浏览器 问题是 Heroku
  • 页眉/页脚终端显示[重复]

    这个问题在这里已经有答案了 如何创建一个包含静态页眉和页脚的 python 脚本 如下图所示 您可以使用curses对于蟒蛇 例子 import curses myscreen curses initscr curses start col
  • 从 ASP.Net MVC Ajax 请求服务器重定向到新页面

    我正在尝试使用另一个控制器调用方法RedirectToAction 但这不起作用 你能解释一下我做错了什么吗 HttpPost public ActionResult AddToWishList int id bool check var
  • JS 对象中的键(字符串)长度有限制吗?

    因此 我们有一个对象 其中键是 id int 值是字符串 但我们注意到 大多数时候 我们是根据字符串来查找 id 的 所以我们决定反转它 让字符串作为键 值作为 id 因为这样我们就不用遍历每个项目并比较值 而是可以这样做var id st
  • iOS 调试构建安装失败

    我有一个 CN1 测试项目 最后一次构建并成功安装在各种测试设备上是在 2017 年 1 月中旬 在使用具有相同证书 配置文件和设备的当前 CN1 版本重建此项目时 它现在无法安装 并显示 无法下载应用程序 此时无法安装 信息 关于可能出现
  • 使用 WebView Xamarin 表单加载本地 HTML

    我正在尝试使用 Xamarin 表单在 Web 视图中加载本地 HTML 页面 我正在使用开发文档中的基本示例 尽管我可以获取要加载的 URL 但无法加载我自己的 HTML 页面 只需要通过 Android 即可完成此操作 因此无需担心 I
  • 附加 .mdf 文件时数据库“无法打开,因为它是版本 661”

    我正在尝试将 MvcMusicStore mdf 附加到 sql server 2008 R2 Management Studio 中的 SQLEXPRESS 实例 sql server 版本 10 0 2531 我从这个项目中得到了数据库
  • 滚动笔记本选项卡 Tkinter

    我想制作很多笔记本选项卡 我想将它们放在画布中并添加水平滚动条 以便我可以滚动它们 我设置了画布大小 但当我添加新选项卡时画布大小不断变化 另外 滚动条不起作用 你能告诉我我做错了什么吗 该程序没有向我显示任何错误 这是代码 from tk
  • .ajaxform 不在验证提交处理程序内工作?

    我在提交之前使用 jquery 验证插件来验证表单 在submitHandler中我使用ajax请求通过ajax发布表单 在我使用 ajax 发送请求之前 但现在表单有图像 而且很难 通过普通的ajax请求序列化文件元素 因此我使用了这个插
  • 子集和的动态规划方法

    给定以下输入 10 4 3 5 5 7 Where 10 Total Score 4 4 players 3 Score by player 1 5 Score by player 2 5 Score by player 3 7 Score
  • java.lang.ClassNotFoundException:org.apache.xmlbeans.XmlOptions

    我正在尝试在 servlet 中使用 POI 将上传的文件处理为 Excel 文件 public static String readExcel InputStream inp InputStream inp null StringBuil
  • 有效的 Java - 尽管创建了多个实例,但方法调用时间相同

    我正在学习 Effective Java 在本书的第 5 条中 Joshua Bloch 谈到了避免创建不必要的对象 一个示例演示了可变的 Date 对象 一旦计算出它们的值就永远不会被修改 这是 不好的做法 public Person D
  • 在 mvc 中加载 2 个下拉菜单的更好方法

    这就是我在页面加载状态和城市下拉列表中加载的方式 我的控制器方法 这是页面加载时调用的第一个方法 public ActionResult Index var states GetStates var cities Enumerable Em
  • 在 Outlook 邮件中发送邮件后 itemId 发生变化

    我正进入 状态itemId之后的邮件项目saveAsync在撰写模式下 邮件项目发送后 项目Id进来Office context mailbox item itemId与撰写模式中给出的不同 用于获取的代码itemId在撰写模式下 var
  • 远程服务器上的 mysqldump

    如果有两台机器客户端和服务器 从客户端如何执行 mysqldump 到服务器 以便转储在客户端上可用而不存储在服务器中 Thanks 这是一个生成 mysqldump 的 PHP 脚本 它直接输出到客户端 不会在服务器上创建任何文件 htt
  • 什么允许函数在返回参数时隐式取消引用参数?

    在读的时候如何借用可变引用而不将其传递给函数 OP 的功能如下 fn deref lt a b a T gt t a mut b mut T gt a mut T t 这对我来说很有意义 然而 他们也指出 正文中的显式取消引用 不需要 fn