Questions tagged «rust»

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

1
闭包何时实现Fn,FnMut和FnOnce?
哪些具体条件为闭合来实现Fn,FnMut和FnOnce特质? 那是: 什么时候关闭不实现该FnOnce特性? 什么时候关闭不实现该FnMut特性? 什么时候关闭不实现该Fn特性? 例如,更改闭包主体的状态会使编译器无法Fn在其上实现。
114 rust  closures 

2
什么时候使用关联类型和通用类型比较合适?
在这个问题中,出现了一个问题,可以通过将使用通用类型参数的尝试更改为关联类型来解决。这提示了一个问题“为什么关联类型在这里更合适?”,这使我想知道更多。 引入关联类型的RFC表示: 该RFC通过以下方式阐明了特征匹配: 将所有特征类型参数视为输入类型,以及 提供关联的类型,它们是输出类型。 RFC使用图结构作为激励示例,并且在文档中也使用了图结构,但是我承认,与类型参数化版本相比,我不完全意识到关联类型版本的好处。最主要的是该distance方法无需关心Edge类型。很好,但是似乎根本没有关联类型的原因。 我发现关联类型在实践中使用起来非常直观,但是当我决定在自己的API中何时何地使用它们时,我发现自己很挣扎。 在编写代码时,何时应在泛型类型参数上选择关联类型,而何时应相反?
107 types  rust  idiomatic 

4
如何在模块文件中使用宏?
我在macro_rules启用了板条箱的同一板条箱中的单独文件中有两个模块。我想使用另一个模块中一个模块中定义的宏。 // macros.rs #[macro_export] // or not? is ineffectual for this, afaik macro_rules! my_macro(...) // something.rs use macros; // use macros::my_macro; <-- unresolved import (for obvious reasons) my_macro!() // <-- how? 我目前遇到了编译器错误“ macro undefined: 'my_macro'” ...,这很有意义;宏系统先于模块系统运行。我该如何解决?
105 module  rust  rust-macros 

5
是否可以在Rust中使用全局变量?
我知道总体上应该避免全局变量。尽管如此,我认为从实际意义上讲,有时(在变量是程序不可或缺的情况下)使用它们是可取的。 为了学习Rust,我目前正在GitHub上使用sqlite3和Rust / sqlite3包编写一个数据库测试程序。因此,这(在我的测试程序中)有必要(作为全局变量的替代方法)在大约十二个函数之间传递数据库变量。下面是一个示例。 在Rust中使用全局变量是否可行,可行和可取? 给定以下示例,我可以声明和使用全局变量吗? extern crate sqlite; fn main() { let db: sqlite::Connection = open_database(); if !insert_data(&db, insert_max) { return; } } 我尝试了以下操作,但似乎不太正确,并导致了以下错误(我也尝试了一个unsafe块): extern crate sqlite; static mut DB: Option<sqlite::Connection> = None; fn main() { DB = sqlite::open("test.db").expect("Error opening test.db"); println!("Database Opened OK"); create_table(); println!("Completed"); } // Create …

3
如何使用Cargo构建多个二进制文件?
我想用adaemon和a创建一个项目,并client通过unix套接字进行连接。 Aclient和Adaemon需要两个二进制文件,那么如何告诉我Cargo从两个不同的来源构建两个目标? 为了增加一点幻想,我想library对的主要部分使用daemon,并且只用二进制文件包装它并通过套接字进行通信。 因此,我们有这种树结构: ├── Cargo.toml ├── target | └── debug | ├── daemon │ └── client └── src ├── daemon │ ├── bin │ │ └── main.rs │ └── lib │ └── lib.rs └── client └── bin └── main.rs 我可以使一个可执行文件同时解决这两个问题,但这不是我想做的,除非这是一种很好的做法。
104 rust  rust-cargo 

2
如何使用本地未发布的板条箱?
我做了一个图书馆: cargo new my_lib 我想在另一个程序中使用该库: cargo new my_program --bin extern crate my_lib; fn main { println!("Hello, World!"); } 我需要怎么做才能使它正常工作? 它们不在同一项目文件夹中。 . ├── my_lib └── my_program 希望这是有道理的。 我以为我可以按照《货运指南》改写路径,但它指出 您不能使用此功能告诉货运如何找到本地未发布的板条箱。 这是在使用最新的稳定版Rust(1.3)时。

1
有没有更快/更短的方法来在Rust结构中初始化变量?
在以下示例中,我更希望在字段的声明中为结构中的每个字段分配一个值。另外,它实际上需要为每个字段添加一条附加语句以为这些字段分配一个值。我要做的就是在实例化该结构时分配默认值。 有更简洁的方法吗? struct cParams { iInsertMax: i64, iUpdateMax: i64, iDeleteMax: i64, iInstanceMax: i64, tFirstInstance: bool, tCreateTables: bool, tContinue: bool, } impl cParams { fn new() -> cParams { cParams { iInsertMax: -1, iUpdateMax: -1, iDeleteMax: -1, iInstanceMax: -1, tFirstInstance: false, tCreateTables: false, tContinue: false, } } }
102 rust 

1
如何有效地从HashMap查找和插入?
我想做以下事情: 查找Vec某个密钥,然后将其存储以备后用。 如果它不存在,请Vec为密钥创建一个空白,但仍将其保留在变量中。 如何有效地做到这一点?自然,我以为我可以使用match: use std::collections::HashMap; // This code doesn't compile. let mut map = HashMap::new(); let key = "foo"; let values: &Vec<isize> = match map.get(key) { Some(v) => v, None => { let default: Vec<isize> = Vec::new(); map.insert(key, default); &default } }; 当我尝试它时,它给了我类似以下错误: error[E0502]: cannot borrow `map` as mutable …
102 hashmap  rust  lookup 

5
将模块拆分成几个文件
我想要一个带有多个结构的模块,每个结构都在自己的文件中。以一个Math模块为例: Math/ Vector.rs Matrix.rs Complex.rs 我希望每个结构都在同一个模块中,可以在主文件中使用它,如下所示: use Math::Vector; fn main() { // ... } 但是,Rust的模块系统(开始时有点令人困惑)并没有提供一种明显的方式来做到这一点。似乎只允许您将整个模块放在一个文件中。这是不生锈的吗?如果没有,我该怎么做?
102 module  rust 

3
是否可以在Rust中编写Quake的快速InvSqrt()函数?
这只是为了满足我自己的好奇心。 是否有此实现: float InvSqrt (float x) { float xhalf = 0.5f*x; int i = *(int*)&x; i = 0x5f3759df - (i>>1); x = *(float*)&i; x = x*(1.5f - xhalf*x*x); return x; } 在Rust中?如果存在,则发布代码。 我尝试过但失败了。我不知道如何使用整数格式编码浮点数。这是我的尝试: fn main() { println!("Hello, world!"); println!("sqrt1: {}, ",sqrt2(100f64)); } fn sqrt1(x: f64) -> f64 { x.sqrt() } …


5
如何使用自定义步骤在范围内进行迭代?
如何用1以外的步骤迭代Rust中的某个范围?我来自C ++背景,所以我想做些类似的事情 for(auto i = 0; i <= n; i+=2) { //... } 在Rust中,我需要使用该range函数,而且似乎没有第三个参数可用于执行自定义步骤。我该怎么做?
100 rust 

1
Rust中的惯用回调
在C / C ++中,我通常使用简单的函数指针进行回调,也许也可以传递void* userdata参数。像这样: typedef void (*Callback)(); class Processor { public: void setCallback(Callback c) { mCallback = c; } void processEvents() { for (...) { ... mCallback(); } } private: Callback mCallback; }; 在Rust中这样做的惯用方式是什么?具体来说,我的setCallback()函数应该mCallback采用哪种类型,应该采用哪种类型?应该Fn吗?也许FnMut吧?我要保存Boxed吗?一个例子将是惊人的。
99 callback  rust 


2
是否可以使一种类型只能移动而不能复制?
编者注:在Rust 1.0之前曾问过这个问题,并且该问题中的某些断言在Rust 1.0中不一定是正确的。一些答案已经更新,可以解决两个版本。 我有这个结构 struct Triplet { one: i32, two: i32, three: i32, } 如果我将此传递给函数,则会隐式复制它。现在,有时我读到一些值不可复制,因此必须移动。 是否可以使该结构Triplet不可复制?例如,是否有可能实现一种特性,该特性将使Triplet不可复制并因此成为“可移动的”? 我在某处读到一个内容,即必须实现该Clone特性以复制不可隐式复制的内容,但我从未读过另一种方法,即具有可隐式复制的内容并使它不可复制,从而可以移动。 那有什么意义吗?
96 rust 

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.