RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1554075
Accepted
asianirish
asianirish
Asked:2023-12-01 20:07:50 +0000 UTC2023-12-01 20:07:50 +0000 UTC 2023-12-01 20:07:50 +0000 UTC

当编译器可以推断生命周期本身时,需要在 Rust 中指定生命周期

  • 772

为什么这段代码会抛出错误:

const MSG: &str = "Hello";

fn one_of(_first: &str, _second: &str) -> &str {
    MSG
}

我向我的铁杆朋友(gpt-4-1106-preview)问了这个问题,他回答说:

该代码会抛出错误,因为 Rust 无法保证引用的字符串的生存MSG时间足够长,足以安全地使用函数返回的引用one_of

好吧,好吧,那么为什么这个函数不会导致错误:

const MSG: &str = "Hello";

fn one(_first: &str) -> &str {
    MSG
}

我朋友回复:

当声明函数时one未显式指定返回引用的生存期时,编译器将使用生存期推断并发现返回值MSG具有静态生存期。因此,编译器假定该函数返回具有静态生命周期的引用,并且此推论与输入参数的生命周期兼容(在本例中忽略该参数,因为它不用于确定返回值的生命周期) )。

我的合理反对:

但是在 one_of 的情况下,编译器可以自动为该函数分配静态生命周期,就像在 one 的情况下一样,为什么您所说的有关 one 的所有内容在 one_of 函数的情况下都无效?

我的朋友终于崩溃了,开始为“造成的混乱”道歉,并表示这两个函数不应该导致错误(即使它们没有)。

我们需要生物神经网络的帮助,那就是你,亲爱的皮革和骨头朋友!解释一下主题

rust
  • 1 1 个回答
  • 68 Views

1 个回答

  • Voted
  1. Best Answer
    Kalashnikov Alexander
    2023-12-05T18:55:59Z2023-12-05T18:55:59Z

    当函数返回引用时,编译器必须知道它的生命周期。我们所说的“知道”是指“从函数签名确定引用的生命周期”,而不检查函数体。以节省程序员工作的名义,Rust 提出了隐式推断返回值生命周期的规则:https://doc.rust-lang.ru/book/ch10-03-lifetime-syntax.html#% D0%9F%D1%80%D0 %B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%BD%D0%B5%D1%8F%D0%B2%D0%BD%D0 %BE%D0%B3%D0% BE-%D0%B2%D1%8B%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F-%D0 %B2%D1%80%D0% B5%D0%BC%D0%B5%D0%BD%D0%B8-%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8。在这种情况下,函数接收两个不同的引用作为输入,编译器不敢确定其中哪个应该绑定到返回引用的生命周期。你需要提示他,例如这样:

    fn one_of<'a>(_first: &'a str, _second: &'a str) -> &'a str {
        MSG
    }
    
    • 1

相关问题

  • 在 Rust 中通过 read_line 输入数据

  • 如何取消引用 rust-gdb 中的 Box?

  • 无法提供静态文件

  • Rust 中的西里尔字母问题

  • 如何从 Rust 的文本文件中逐个字符地读取?

  • 为什么 Rust 不能像在 C++ 中那样在 main 之前分配内存?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5