Rust 为什么我会得到;借来的价值活得不够长。”;在这个例子中?

编者按:此问题中的代码早于Rust 1.0。此代码的等效现代版本按原样编译 我仍在学习锈菌,并对以下几点感到惊讶 我不明白为什么这段代码会编译: use std::iter::AdditiveIterator; fn main() { let range = [1,2,3,4,5,6,7,8,9]; let sum = range.iter().map(|&x| x * x).filter(|&x| x % 2 == 0).sum(); printl

Rust函数返回一个闭包:`explicit lifetime bound required";

以下代码不编译 fn main(){ 设foo=bar(8); println!(“尝试使用4:{:d},foo(4)); println!(“尝试使用8:{:d},foo(8)); println!(“尝试用13:{:d},foo(13)); } // fn条(x:int)->(|int |->int){ |n:int |->int{ 如果n

Rust 如何创建对各种整数类型通用的is_素数函数?

我刚刚深入了解了Rust,并想制作一些通用的基本数学函数。我有以下is_prime功能: fn is_prime(n: i64) -> bool { if n == 2 || n == 3 { return true; } else if n % 2 == 0 || n % 3 == 0 { return false; } let mut i = 5i64; let mut w = 2i64; while i

Rust是否具有使用早期字段初始化结构字段的语法?

示例代码,不编译: pub struct S { pub a: int, pub b: int } impl S { pub fn new(input: int) -> S { S { a: input + 1, b: a } } } b:a位不是有效的语法,在当前版本中有什么方法可以做到这一点吗?[rustc 0.13.0-每晚(eedfc0779 2014-11-25 22:36:59+0000)] 显然,我可以重复输入+1或使用一个

如何在Rust中将无符号整数转换为整数?

所以我试图得到一个随机数,但我不希望它作为uint而不是int返回。。。也不确定这个匹配是否正确,但编译器没有走那么远,因为它从未听说过我正在尝试做的事情: fn get_random(max: &int) -> int { // Here we use * to dereference max // ...that is, we access the value at // the pointer location rather

Rust 从现在起如何计算5分钟?

我需要从现在开始数5分钟。我想我可以用它,但它被弃用了。我可以使用什么以及如何使用它?如果将鼠标悬停在文档中的“弃用”注释上,您将看到它指向您。基本上,它已经从标准库转移到自己的包中 如果您在文档中指定的时间板条箱上添加了依赖项,则此操作可以: extern crate time; use std::time::duration::Duration; fn main() { let now = time::get_time(); println!("now: {}", n

Rust 如何让cargo自动重新编译更改的文件?

我听说cargo能够自动重新编译更改后的源文件,但我很难弄清楚如何告诉它这样做 现在,每当我想键入检查代码时,我都会手动运行货物构建或货物运行。我更愿意只保存文件并在相邻的终端窗口中查看结果 如果你仍然不知道我在说什么,我正在寻找与sbt~compile或sbt~run相当的货物 奇怪的是,它似乎很难找到,所以我开始怀疑它是否真的得到了支持。可能有人说过cargo可以检测更改的文件并重新编译它们,而他的意思是cargo可以检测未更改的文件并避免重新编译它们,比如make,我相信区别在于运行car

Rust 如何实现返回受整型约束的泛型的函数?

如果T是整数类型,我如何实现以下功能 fn get_vec<T>() -> Vec<T> { let vec: Vec<T> = Vec::new(); let n: i32 = 5; let n_as_t = n as T; vec.push(n_as_t); vec } fn get_vec()->vec { 让vec:vec=vec::new(); 设n:i32=5; 设n_as_t=n as t; 向量推

Rust 类型别名上缺少生存期说明符[E0106]

此代码: use std::fmt; use std::result::Result::{self, Ok, Err}; #[derive(Clone)] #[derive(Copy)] enum Tile { White, Black, Empty } type Board = &[[Tile; 19]; 19]; 产生以下错误: Compiling go v0.1.0 (file:///home/max/gits/go_rusty) src/main.rs

Rust 无法移出借用的内容-ref不';行不通

我有以下代码: enum MyEnum1 { val1, val2 } struct Struct1 { field1: MyEnum1, field2: String } fn fn1(a: Struct1, b: String, c: String) { let let1 = fn2(&a.field1); } fn fn2(a: &MyEnum1) { let a11 = *a; // error let s = Struct1 {

Rust 是否有命令自动将板条箱添加到我的Cargo.toml?

我原以为会有这样的东西:cargo install stopwatch,但在文档中找不到 查找包版本并手动将包添加到.toml: [dependencies] stopwatch="0.0.6" 感觉不够自动化。:) 不,货物里没有这种东西。只有一个cargo install子命令安装板条箱系统范围内的二进制文件 可以创建新的第三方,并根据您的需要进行操作 这些cargo子命令可以通过cargo install安装在一个有趣的元循环中 %cargo安装货物编辑 #现在“货物添加”可用 %货物装

Rust 为什么'fn(&;T)`没有实现'Clone'特性?

以下代码不起作用,因为类型fn(&u16)未实现克隆特征: 当然,我可以自己实施: impl Clone for FStruct{ fn clone(&self) -> Self{ unsafe{ let mut t: FStruct = std::mem::uninitialized(); std::ptr::copy_nonoverlapping(self, &mut t, 1);

Rust 从皮棉中找出板条箱的当前版本?

我正在开发一个扩展的弃用lint,它可以决定某些东西是否已经弃用或将弃用。不过,还有一个问题:板条箱似乎没有版本信息。我知道我可以使用cargo将设置的一些环境变量获取当前板条箱的版本,但这还不足以区分不推荐使用的依赖项部分 我至少可以通过ctx.sess.local\u cratet\u source\u文件获取当前板条箱路径(如fhahn的) 这样,除非获得文件路径、查找和解析货物.ROCK 手动(我认为是脆弱的和HACKY),有没有办法得到依赖关系的版本号,如果有,那么如何?< P>使用相

Rust 我怎么知道什么东西是不是用铁锈初始化的?

我有一些伪代码,用于检查变量是否为null: 测试; if(test==null){ 测试=新测试(); } 回归试验; 在铁锈里我怎么做这样的事?这是我迄今为止的尝试: struct Test { time: f64, test: Test, } impl Test { fn get(&self) -> Test { if self.test == null { // <-- s

Rust 模块rs和嵌套模块生锈

我想指定一个通用特性引擎,并提供两种不同的实现:随机和虚拟。我想使用以下文件结构: src- |-引擎 |-mod.rs//包含发动机特性代码 |-random.rs//包含第一个引擎实现 |-dummy.rs//包含第二个引擎实现 我在lib.rs中有类似的内容: pub mod engine { // random moves engine pub mod random; pub mod dummy; } 当我尝试在其他模块的任何位置添加use engine::e

在Rust中进行多个交叉引用的最佳方法是什么?

我正在将某些随机几何体的蒙特卡罗模拟从Python转换为Rust。Python中的自由让我在整个代码中存储对其他对象的引用时有点马虎,但在Rust中实现这一点似乎更难 在我当前的Python实现中,主要对象是几何体。它包含一个具有唯一ID的顶点es字典(ID也是字典中的查找键)和一个三角形s字典(与顶点的情况相同)。每个三角形都包含一个包含三个顶点的列表(这次没有字典,这里是一个有序列表),每个顶点都包含一个它出现在其中的所有三角形的字典(同样由三角形的唯一ID索引) 这导致了大量的交叉引用,但

Rust 接收错误[E0276]:impl比trait和泛型有更严格的要求

我试图定义一个trait来比较两个给定的参数,并根据实现返回一个结果。它有两个泛型,但当我们实现它时,它们可以是任何类型: pub trait Assert<L: Any + Debug> { fn compare<R: Any + Debug>(self, target: R) -> AssertResult; } pub属性断言{ fn比较(自我,目标:R)->资产结果; } 现在,当我想要实现equal时,我将执行以下操作: pub struct

Rust 具有比超级性状更严格关联类型界限的性状

我有一个简单的特点,与一个没有界限的关联类型 trait Board { type Move; fn moves(&self) -> Vec<Self::Move>; } 该示例高度简化,但似乎显示了问题:编译器认为我正在尝试创建一个新的关联类型,但我只希望子序列要求更严格的边界。有什么办法可以做到这一点吗?以下是您的要求: trait TextBoard: Board where Self::Move: Debug, { // ...

Rust 根据xargo的说法,我的代码已经成功构建,但是';目标中没有二进制,为什么?

我是个新手,所以如果我还不懂行话/工具,请原谅我。我试图让STM32F4使LED闪烁,我认为代码是正确的,但当我构建它时,xargo不会生成二进制或任何类型的错误。我的代码是: #![feature(proc_macro)] // <- IMPORTANT! Feature gate for procedural macros #![no_std] extern crate cortex_m; extern crate cortex_m_rtfm as rtfm; extern crat

Rust 如何在纹理中绘制基本体?

当我想在活塞中绘制一些基本体时,我会这样做: let gl = &mut GlGraphics::new(OpenGL::V3_2); gl.draw(viewport, |context, gl| { Rectangle::new([1., 1., 1., 1.]) .draw([0., 0., 10., 20.], &context.draw_state, context.view, gl); }); 此代码在缓冲区中绘制一个矩形,并将其显示在屏幕

Rust 从Vec创建Petgraph图形<;(字符串,字符串)>;从JSON加载

我正在尝试从JSON数据创建一个petgraph。JSON包含图形的边,键表示起始顶点,值是相邻顶点的列表。这是可能的 我设法创建了一个Vec,但没有像预期的那样创建一个Vec extern crate petgraph; extern crate serde_json; use petgraph::prelude::*; use serde_json::{Value, Error}; fn main() { let data = r#"{ "A": [ "B" ],

Rust 如何使用TryFrom将usize转换为u32?

我想在Rust中将usize类型化变量转换为u32类型化变量。我知道usize变量可能包含大于2^32的值,在这种情况下,转换应该失败。我正在尝试使用trait的TryFrom执行转换 这是一个简单的例子(Nightly Rust,): 代码未编译,出现以下编译错误: error[E0277]:不满足特性绑定'u32:std::convert::From' -->src/main.rs:6:15 | 6 |让res=u32::从(a)开始尝试; |^^^^^^^^^^^^^^^^未为'u32'实

Rust 在发出的LLVM IR上执行哪些LLVM传递?

如果我使用c--emit=llvm-ir编译,编译器将发出llvm-ir 对发射的IR执行了哪些LLVM传递(如果有) 有没有办法指定在发射IR之前要执行的过程 对发射的IR执行了哪些LLVM传递(如果有) 如果您使用的是夜间编译器,那么可以使用-Z print llvm passes让llvm打印运行的过程。我建议也传入-Z no parallel llvm和-C codegen units=1,以使输出更清晰,重复性更少 $rustc-C codegen units=1-Z无并行llvm-Z

Rust 为什么需要AddAssign作为超级性状的性状也需要调整其大小?

我有一个特性,为了实现这个特性,我想要求实现者实现AddAssign;然而,这样做导致我的特质似乎需要大小: trait Foo: ::std::ops::AddAssign {} trait Bar: Iterator {} Bar编译精细Foo,但是: error[E0277]:不满足特性绑定'Self:std::marker::Sized' -->src/main.rs:1:1 | 1 | trait Foo:::std::ops::AddAssign{} |^^^^^^^^^^^^

Rust 如何构造和传递一个迭代器的迭代器?

我试图通过在其中实现简单的算法来避免生锈。我设法制作了一个通用的merge\u排序,最后得到了以下签名: fn merge_sorted<IL, ILL, I: Ord>(mut arrays: ILL) -> Vec<I> where IL: Iterator<Item = I>, ILL: Iterator<Item = IL>, { // ... } 正如所料,此示例中的向量具有以下类型: std::vec::

Rust 为什么rand::Rng能够在无std环境中工作,即使我没有将默认特性设置为false?

在no\u std环境中使用它之前,我是否需要这样做 lib.rs #![无标准] 使用rand::Rng; pub fn random_small()->u8{ rand::thread_rng()。gen::() } Cargo.toml [dependencies] rand = "0.6.5" 我没有使用#![no_std]在mymain.rs中。是的,您需要禁用兰德的std功能,以便在std不可用的环境中使用它。但是,如果std可用,则不禁用std功能仍然有效 #![no_std

Rust 在锈病中使用逆变的例子是什么?

在中,它表示函数指针类型可以使用逆变。然而,我找不到这方面的好例子。我试图用一个函数指针编写一个结构,但是相反的方法似乎不起作用 这方面的代码示例是什么? 在上搜索“contra”一词有许多相关段落: 事实上,在锈迹中很难看到逆差,尽管它确实存在 注意:语言中唯一的矛盾来源是函数的参数,这就是为什么它在实践中不会出现太多问题。调用逆变涉及使用函数指针的高阶编程,函数指针获取具有特定生存期的引用(与通常的“任何生存期”相反,它进入更高秩的生存期,独立于子类型工作) 这就是为什么函数类型不同于语言

Rust 什么';是元组变体吗?(理解编译器错误消息)

使用wasm_bindgen和serde,我试图为使用惯用rust的复杂结构返回一个JsValue。我创建了一个单独的示例来说明我看到的错误 结构声明: #[derive(Serialize)] pub struct BookStoreData { pub h: HashMap<String, String>, pub name: String, } 您可以看到基于 要再现错误,请从回购的根目录运行npm run start或cd-crater&cargo-buil

Rust 在静态函数中使用FnMut()闭包

背景:我试图避免在嵌入式系统的中断处理程序中使用互斥/RefCell/选项。我不想使用heap(我也不认为这是必要的——但请随意指出错误)。我不能使用std。我已经看过了cortex-m-rtfm,它很整洁,但是很有侵略性。无论如何,这是一个学习练习。如果成功的话,我更愿意使用闭包来处理中断,因为它感觉更像是赤裸裸的锈迹。我是个十足的新手——我已经和它一起工作了大约一个星期。在阅读文档、重读铁锈书、博客帖子等时,我尝试了很多不同的版本。,。我不知道我做错了什么 下面是示例代码。以下问题: use

Rust 使用“生成时,忽略输出文件名中的哈希值”;货物锈迹--o文件名“;可能的

有没有办法用cargo控制输出文件名C--o文件名给出文件名哈希: 输出甚至建议忽略-C extra filename=-c961d75f8bcf3c48,但情况似乎并非如此。例如,我可以编写脚本 mv $(ls filename* | grep -E 'filename-\w+$') filename 但我宁愿找出如何控制货物/生锈。这可能是一个错误,请参阅货物问题6899:这可能是一个错误,请参阅货物问题6899: mv $(ls filename* | grep -E 'filename

Rust 如何找到或插入生锈的Vec

我正在尝试编写一个函数,该函数find返回对Vec中现有元素的可变引用,或者如果该元素不存在,则插入它并返回对新元素的可变引用 我试过好几次了,但借书人不相信。我已经将我试图编写的代码简化为下面的示例,这会产生相同的错误 fn mut\u find\u或插入(vec:&mut vec,val:T)->&mut T T{ 如果让某些(u)=向量iter_mut().find(|u |**u==val){ U }否则{ 矢量推力(val); vec.last_mut().unwrap() } }

Rust 易变锈蚀

我对锈病是个新手,我只是在做些运动。 有一个链表。例如,0->1->2->3->4,在索引2处将其截断,然后将两者反转,然后组合它们。=>00->4->3 #[派生(调试)] 结构节点{ 瓦尔:使用, 下一步:选择, } impl节点{ fn新(i:usize)->节点{ ... } fn反向(自身,k:usize)->框{ 设mut-prev=None; 让mut curr=Box::new(self); 让第一部分尾=&mut curr; 设muti:usize=0; 而我{ 上一个=一些(

Rust 是否有生锈的板条箱或货物升级可以格式化进口?

是否有办法优化和格式化范围内的所有板条箱进口,以清理进口部分?问题是进口商品变得拥挤不堪,堆积如山 之前: use actix_web::web::{Data, Payload}; use actix_web::Error; use actix_web::{ error::{BlockingError, ErrorUnauthorized}, web, HttpResponse, }; 之后: use actix_web::{web:: {Dat

Rust 返回引用当前函数拥有的数据的值

此代码引发有关从函数返回引用的错误: fn sha512_256_digest(str: &[u8]) -> &[u8] { let x = digest::digest(&digest::SHA512_256, str); x.as_ref() } 在这里返回x的as_ref()值的正确方法是什么?我不确定您使用的是哪个哈希库,但是应该有一种方法来获取实际的哈希数据(而不是对它的引用)。查看您的代码,这可能是一个类型为[u8;32]的值。这是您希

如何理解Rust中函数参数和返回值的生存期?

我是铁锈行业的新手,我仍然在铁锈行业挣扎终生。Rust编程语言书将寿命定义为 该引用的有效范围 当上下文是单个函数时,很容易理解。例如,在下面的代码中,s的生存期是蓝框,x的生存期是绿框等等 说到函数,我不太明白函数参数和返回值的生存期到底意味着什么。假设我们有这个函数: fn parse_record<'i>(input: &'i [u8]) -> Record<'i> { ... } 函数签名状态下v和result在main中的生存期必须相同吗?我想

Rust 如何在二进制文件和机箱中的cdylib之间共享代码?

我正在构建一个应用程序,它可以钩住一些Windows事件。 钩子代码必须在DLL中才能工作。我在Cargo.toml中设置[lib]和板条箱类型=[“cdylib”],并在main.rs中使用它 │ 货舱 │ └───src 图书馆 梅因 它起作用了 我想添加第二个二进制文件,因此使用以下结构: └───src │ 图书馆 │ └───箱子 bin1.rs bin2.rs 它起作用了 bin1.rs和bin2.rs有一些重复的代码,我想将它们移动到一个新的app.rs模块,所以我尝试

Rust 有没有办法将两个或多个列表按同一顺序洗牌?

我想要这样的伪代码: a=[1,2,3,4]; b=[3,4,5,6]; iter=a.iter_mut().zip(b.iter_mut()); shuffle(iter); //洗牌示例: //a=[2,4,3,1]; //b=[4,6,5,3]; 更具体地说,是否有如下功能: fn shuffle<T>(iterator: IterMut<T>) { /* ... */ } fn shuffle(迭代器:IterMut){/*…*/} 我的具体案例是尝试按行和

如何将Rust变量枚举强制转换为基础结构?

下面的bind()调用适用于IPV4,但不适用于IPV6 pub enum SocketAddr { V4(SocketAddrV4), V6(SocketAddrV6), } pub fn new<A: ToSocketAddrs>(local_addr: A, _: Option<u32>) -> io::Result<UdpConnector> { let mut addr = net::addr_from_trait(l

无法使用postgres功能编译Rust SQLx

如果我尝试使用SQLx的postgres特性,如下所示 [dependencies] sqlx = { version = "0.3.3", default-features=false , features=["runtime-async-std", "macros", "postgres", "all-type"] } 然后我得到一个编译错误,如下所示 Compiling sqlx-core v0.3.4 error[E0658]: use of unstable library f

Rust 信任FFI、回调和生存期

我正在尝试围绕libuv构建一个很好的rust包装器,这是一个用C编写的事件循环库。我已经基本完成了,但是我在回调和生命周期方面遇到了一些问题 作为一个事件循环库,libuv严重依赖回调。我有一些代码可以接受函数、闭包或(obj,objectj上的方法)的元组,它可以创建一个合适的“蹦床”来跨越FFI边界。这一切都有效 然而,我遇到的问题是,我不知道如何对待人生。在这一点上,我要求这些函数/closures/objs具有静态的生命周期,但在实际使用我的库时,这就产生了一大堆麻烦:那么,这些函数/

为什么Rust Analyzer不同意编译器?

我使用的是最新的稳定版本:rustc 1.46.0(04488afe3 2020-08-24) 锈蚀分析仪需要进口: use chrono::offset::TimeZone; 为了接受这个表达: Utc.ymd(1970, 1, 1).and_hms_milli(0, 0, 0, 200) (它将.ymd突出显示为{unknown}) 如果添加导入,编译器将发出警告: Compiling foo v0.1.0 (/home/fadedbee/foo) warning: unused

Rust 如何复制锈流

我有一个类似于以下内容的程序: struct MyEvent { /* some fields */ } struct MyStruct { /* some fields */ } struct MyStreamer { /* holds some state */ } impl MyStreamer { pub fn stream_objects<'a, 'b: 'a>( &'a self, event_stream: Pin<

Rust 当最后一个发送者被丢弃,但接收者仍处于活动状态时,是否可以在Tokio MPSC中保存项目?

我有一个有界的Tokio MPSC队列,有一个发送方和一个接收方。我在一个任务中放入了几个项目(在本例中,数字1到10,包括在内),然后在另一个任务中取出这些项目。正如预期的那样,接收器处理所有10个值 然后,我在处理之间添加了一些其他异步任务(在本例中,通过取消接收循环中的sleep调用的注释),现在,当最后一个发送方完成时,通道的内容被删除 使用tokio::sync::mpsc; 使用东京::时间::睡眠; 使用std::time::Duration; #[tokio::main] 异步f

Rust 执行BFS时的借用检查器问题

我正在写一个小程序来计算rust中PERT图()上的关键路径 我将Task对象存储在hashmap中。hashmap由名为Pert的对象拥有。每个Task对象拥有两个Vec对象,标识任务的先决条件和后续任务,并有一个i32来指定任务的持续时间。任务在main.rs中创建,并通过add函数添加到Pert对象中 task.rs: pub struct Task { name: String, i32: duration, followers: Vec<String>

Rust 如何在两个板条箱中使用相同的自定义类型,并在一个板条箱中为它们实现外来特性?

我正在为web应用程序编写客户端(使用mogwai)和服务器(使用actixweb)。客户端和服务器将通过websocket(使用rmp\u serde)交换许多自定义类型的消息。理想情况下,我只需要定义这些消息类型一次,然后将它们导入到客户机和服务器库中。问题是,在服务器端,这些类型需要实现来自actix的某些特性,而在客户端,它们不需要。如果我只是在第三个板条箱中定义类型并将它们导入到这两个板条箱中,那么在编译客户机时,我必须构建actix的所有依赖项(是的,它们将分别构建,因为客户机和服务

Rust 生锈-突然可以';在WebSocket上找不到拆分方法?

我是一个新手,在运行一些简单的ws示例时遇到了很多麻烦 我在Cargo.toml文件中有一个新项目: [package] name = "ouranos4" version = "0.1.0" authors = ["jasongoodwin <jay.michael.goodwin@gmail.com>"] edition = "2018" # See more keys and their defi

  1    2   3   4   5   6  ... 下一页 最后一页 共 124 页