小编A. *_*man的帖子

Rust 函数/结构定义中 lifttimes 的字面含义是什么?

我一直在努力寻找 Rust 生命周期的一个很好的解释。我的想法是,它们是我们告诉编译器哪些变量必须比哪些变量寿命更长的方式,因此它可以验证引用是非悬空的,而不必检查每个代码路径。我不明白的是我们在使用它们时实际上在说什么。举个例子:

fn foo<'a>(bar: &'a i32, baz: &'a i32) -> &'a i32 {
    bar
}

fn main() {
    let m = 5;
    let x = &m;
    {
        let n = 6;
        let y = &n;
        {
            let z = foo(x, y);
            dbg!(z);
        }
        dbg!(y);
    }
    dbg!(x);
}
Run Code Online (Sandbox Code Playgroud)

这编译并运行良好。在这里xy, 和z都活了不同的时间长度。基础数据mn也存在不同的时间。很明显,当我们声明参数和footo 的返回值都具有生命周期时'a,我们并不是说它们都在程序的完全相同的一段时间内生存。(我尽量不说“一生”,抱歉措辞尴尬。)

我听到的另一种解释是我们说在 、 和返回值的生命周期的交点处存在一些生命周期'a。然而,这将是一个微不足道的声明,因为显然它们都在我们调用时的范围内。barbazfoo

在我看来,我们所说的是,存在某种生命周期,'a使得barbaz超过 …

lifetime rust

10
推荐指数
1
解决办法
732
查看次数

std::cout 如何知道在哪里打印?

为什么当我运行 C++ 程序时会打开一个终端窗口,以及如何std::cout知道它应该打印到该终端?

c++ cout std

4
推荐指数
1
解决办法
1355
查看次数

Rust:无法将 `Iterator&lt;Item = Box&lt;Dog&gt;&gt;` 收集到 `Vec&lt;Box&lt;dyn Animal&gt;&gt;` 中

我觉得这段代码应该可以工作,因为在大多数情况下Box<Dog>s 应该能够隐式转换为s:Box<dyn Animal>

struct Dog {}
trait Animal {}
impl Animal for Dog {}

fn main() {
    let _: Vec<Box<dyn Animal>> = [Dog {}, Dog {}]
        .into_iter()
        .map(Box::new)
        .collect();
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下编译器错误:

error[E0277]: a value of type `Vec<Box<dyn Animal>>` cannot be built from an iterator over elements of type `Box<Dog>`
    --> src/main.rs:9:10
     |
9    |         .collect();
     |          ^^^^^^^ value of type `Vec<Box<dyn Animal>>` cannot be built from `std::iter::Iterator<Item=Box<Dog>>`
     |
     = help: the trait `FromIterator<Box<Dog>>` is not implemented for …
Run Code Online (Sandbox Code Playgroud)

rust trait-objects

3
推荐指数
1
解决办法
247
查看次数

C# 错误 CS0117:“数组”不包含以下定义

我正在尝试在我的程序中使用Array.Fill,但收到一条错误消息,指出没有Fill. 我在这篇文章的标题中省略了函数名称,因为Array. 我在网上发现了多个论坛帖子,人们有同样的问题,对他们来说,解决方案是添加using System;using System.Linq;,但我已经有了这两个。我怀疑问题是我需要以某种方式添加System.Runtime.dll包含 定义的程序集Array.Fill,但我将 Unity 与 Visual Studio for Mac 一起使用,并且我无法找到在任一程序中管理程序集的方法。我也无法在任何地方找到项目或解决方案文件(我相信这就是我要添加程序集的地方)。这是问题线:

Array.Fill<Vector4>(cross, Rot4.Cross(vs[0], vs[1], vs[2]));
Run Code Online (Sandbox Code Playgroud)

有谁知道我可以尝试什么?我想我可以手动填充数组,但我想知道为什么这不起作用。

c# linq .net-assembly unity-game-engine visual-studio-mac

2
推荐指数
1
解决办法
3638
查看次数