Questions tagged «rust»

Rust是一种没有垃圾回收器的系统编程语言,主要关注三个目标:安全性,速度和并发性。使用此标签可解决有关用Rust编写的代码的问题。对于特定于代码的问题,请使用特定于版本的标签,例如需要使用特定版本的代码,例如[rust-2018]。对[rust-cargo]和[rust-macros]等子主题使用更具体的标签。

2
需要全面了解Rust的单元格和引用计数类型
Rust标准库中有几种包装器类型: std::cell模块中的单元格:Cell和RefCell 引用计数的包装器,如Rc和Arc。 中相应的类型的std::sync模块:Mutex或AtomicBool例如 据我了解,这些包装器提供了比简单参考更多的可能性。虽然我了解一些基本知识,但看不到整个图片。 他们到底在做什么?细胞和参考计数家族是否提供正交或相似特征?
73 rust 

2
如何从方法中改变结构的字段?
我想做这个: struct Point { x: i32, y: i32, } impl Point { fn up(&self) { self.y += 1; } } fn main() { let p = Point { x: 0, y: 0 }; p.up(); } 但是这段代码会引发编译器错误: error[E0594]: cannot assign to field `self.y` of immutable binding --> src/main.rs:8:9 | 7 | …
73 rust  mutable 


2
对结构特征的引用
我有个特质 Foo pub trait Foo { fn do_something(&self) -> f64; } 和引用该特征的结构 pub struct Bar { foo: Foo, } 尝试编译我得到 error: reference to trait `Foo` where a type is expected; try `Box<Foo>` or `&Foo` 将结构更改为 struct Bar { foo: &Foo, } 告诉我 error: missing lifetime specifier 将定义更改为 struct Bar { …
72 rust  traits 

3
如何编写一个带迭代器的Rust函数?
我想编写一个接受迭代器并返回一些操作结果的函数。具体来说,我正在尝试迭代a的值HashMap: use std::collections::HashMap; fn find_min<'a>(vals: Iterator<Item=&'a u32>) -> Option<&'a u32> { vals.min() } fn main() { let mut map = HashMap::new(); map.insert("zero", 0u32); map.insert("one", 1u32); println!("Min value {:?}", find_min(map.values())); } 可惜: error: the `min` method cannot be invoked on a trait object --> src/main.rs:4:10 | 4 | vals.min() | ^^^ …

2
这是什么东西:有时它会被包裹有时它会被包裹
注意此问题中read_line与~strRust的1.0之前版本有关的细节。关于unwrap并且unwrap_or仍然相关的一般概念。 我在阅读Rust for Rubyists时遇到过它,即: let mut reader = BufferedReader::new(io::stdin()); let input = reader.read_line().unwrap_or(~"nothing");
71 rust 

4
是否有模数(不是余数)函数/运算?
在Rust(像大多数编程语言一样)中,%运算符执行余数运算,而不是模数运算。这些运算对负数有不同的结果: -21 modulus 4 => 3 -21 remainder 4 => -1 println!("{}", -21 % 4); // -1 但是,我想要模数。 我找到了一种解决方法((a % b) + b) % b,但是如果已有功能,我不想重新发明轮子!
71 rust  modulo 


1
Rust中的“基本类型”是什么?
在某个地方,我选择了“基本类型”(及其基本属性#[fundamental])一词,而现在我想了解更多有关它的信息。我隐约记得它是关于在某些情况下放宽一致性规则的。而且我认为引用类型就是这种基本类型。 不幸的是,在网上搜索并没有带给我很多。Rust参考没有提到它(据我所知)。我刚刚发现了一个有关创建元组基本类型和引入该属性的RFC 的问题。但是,RFC有一个关于基本类型的段落: 一种#[fundamental]类型Foo是在其中实施全面实施Foo是一项重大变化。如上所述,&并且&mut是基本的。将此属性应用于Box,使其Box 行为与相干性相同&并&mut相对于相干性。 我觉得这句话很难理解,感觉我需要深入了解完整的RFC才能了解基本类型的这一点。我希望有人可以用更简单的术语来解释基本类型(当然,不必过多简化)。这个问题也可以作为一条容易找到的知识。 为了理解基本类型,我想回答以下问题(除了主要的“它们什至是什么?”问题,当然): 基本类型可以比非基本类型做得更多吗? 作为图书馆作者,我可以从某些类型上标记为#[fundamental]吗? 核心语言或标准库中的哪些类型是基本的?
37 rust 

1
不是复制或克隆的全局const在Rust中如何工作?
说我有以下片段(游乐场) struct A { pub val: u32 } const GLOBAL_A: A = A {val: 2}; fn main() { let some_a: A = GLOBAL_A; let other_a: A = GLOBAL_A; println!("double val = {}", some_a.val + other_a.val); } 由于A既不是也不Clone是Copy,我假设的值GLOBAL_A将被移动。这对于const来说没有多大意义,而且无论如何也无法显示,因为它可以被“移动”两次。 允许以上代码片段起作用的规则A是什么Clone也不是Copy?
20 rust  const  move 


2
为什么`std :: mem :: drop`与排名较高的特征范围中的闭包| _ |()不完全相同?
的实现std::mem::drop记录如下: pub fn drop<T>(_x: T) { } 因此,我希望该封盖|_| ()(俗称马桶盖)drop在两个方向上都可以按1:1的比例替换。但是,下面的代码显示drop与该函数的参数上绑定的较高特级特征不兼容,而马桶盖则兼容。 fn foo<F, T>(f: F, x: T) where for<'a> F: FnOnce(&'a T), { dbg!(f(&x)); } fn main() { foo(|_| (), "toilet closure"); // this compiles foo(drop, "drop"); // this does not! } 编译器的错误信息: error[E0631]: type mismatch in function arguments --> src/main.rs:10:5 | …

4
如何从高阶特征绑定特征返回关联类型?
我有一个特征,具有反序列化关联类型的功能。但是,该关联类型必须具有调用者确定的生存期,因此我有一个单独的特征,我使用了绑定到其上的更高等级的特征,以便可以在任何生命周期中反序列化它。 我需要使用返回此关联类型的闭包。 我有以下代码可以做到这一点: #![allow(unreachable_code)] use std::marker::PhantomData; trait Endpoint: for<'a> EndpointBody<'a> {} trait EndpointBody<'a> { type Out: 'a; fn serialize(body: &Self::Out) -> Vec<u8>; fn deserialize(raw_body: &'a [u8]) -> Self::Out; } // ///////////////////////////////////////////////////////// /// Trait object compatible handler trait Handler { fn execute(&self, raw_body: &[u8]) -> Vec<u8>; } /// Wraps a function …

1
如何在Rust中将异步函数放入地图中?
为编写异步路由器时,我无法处理异步功能hyper。 这段代码: use std::collections::HashMap; use std::future::Future; type BoxedResult<T> = Result<T, Box<dyn std::error::Error + Send + Sync>>; type CalcFn = Box<dyn Fn(i32, i32) -> dyn Future<Output = BoxedResult<i32>>>; async fn add(a: i32, b: i32) -> BoxedResult<i32> { Ok(a + b) } async fn sub(a: i32, b: i32) -> BoxedResult<i32> { Ok(a …
11 rust  async-await 

1
我可以只为我的代码添加调试信息而没有包吗?
包含调试信息,我的二进制文件大约变为400 MB。发生这种情况是因为Rust包含所有依赖项的调试信息。有什么办法只为我的代码包括调试信息吗? [package] name = "app" version = "0.7.1" edition = "2018" [dependencies] actix = "*" actix-web = {version = "1.0", features = ["ssl"]} ... tokio-core = "*" tokio = "*" [profile.release] debug = true
11 rust  rust-cargo 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.