- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我在 Rust 中有一个具有以下签名的函数:
fn f<'a>(x: &'a i32) -> &'a i32;
假设我执行以下操作:
let x = 0;
let y = f(&x);
在这种情况下,Rust 借用检查器认为 y
借用了 x
。为什么?比“因为你在参数类型和返回类型中使用了相同的生命周期参数”更深层次的原因是什么。
最佳答案
函数签名
fn f<'a>(x: &'a i32) -> &'a i32;
表示 f
返回的值是对 x
参数所指内容的引用,因此它不能超过它。例如,这不起作用:
// Compile error
let y = {
let x = 0;
f(&x)
// x is dropped here
};
// Here y still "exists", but x doesn't (y outlives x)
针对您的具体问题:
Lets say I do the following then:
let x = 0;
let y = f(&x);In that case, the Rust borrow checker considers y to borrow x. Why?
答案是因为 f
的函数签名告诉了它。举个例子,假设我们把签名改成这样:
fn f<'a, 'b>(x: &'a i32, z: &'b i32) -> &'a i32;
然后我们像这样调用f
:
let x = 0;
let z = 1;
let y = f(&x, &z);
在上面的代码中,y
借用了 x
,但没有借用 z
。这是因为 f
的返回值的 'a
生命周期与 x
的生命周期相同。
关于rust - 生命周期参数和借用如何在函数签名中相互作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66305986/
我打算在 AngularJS 中尝试一个项目,其中所有组件都将使用 Polymer 开发。现在在开始这个项目之前,我有几个疑问: 在使用 Angular 服务获取数据后,我可以更新 Polymer 组
假设我有多个线程正在从文件中读取,并且我想确保在任何时间点只有一个线程正在从文件中读取。 实现这一点的一种方法是使用 mvar :: MVar ()并确保如下互斥: thread = do ..
对于只有因子列的给定数据框,我想列出数据中没有出现的最多 m 个属性的所有因子组合。下面是一个简单的例子: d cc unlist(cc, recursive=F) -> cc length(cc)
对于相关图,我希望有一个光学正方形图(x 和 y 的像素长度相同),但 x 和 y 也有一定的轴限制。我可以分别获取这两个,但不能同时获取: import matplotlib.pyplot as p
对于相关图,我希望有一个光学正方形图(x 和 y 的像素长度相同),但 x 和 y 也有一定的轴限制。我可以分别获取这两个,但不能同时获取: import matplotlib.pyplot as p
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
我是一名优秀的程序员,十分优秀!