Questions tagged «rust»

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

2
如何传递Rust函数作为参数?
我可以将函数作为参数传递吗?如果没有,什么是好的选择? 我尝试了一些不同的语法,但没有找到正确的语法。我知道我可以这样做: fn example() { let fun: fn(value: i32) -> i32; fun = fun_test; fun(5i32); } fn fun_test(value: i32) -> i32 { println!("{}", value); value } 但这并未将函数作为参数传递给另一个函数: fn fun_test(value: i32, (some_function_prototype)) -> i32 { println!("{}", value); value }
81 rust 

6
为什么在Rust中将大写的字符串首字母大写?
我想将的第一个字母大写&str。这是一个简单的问题,我希望有一个简单的解决方案。直觉告诉我要做这样的事情: let mut s = "foobar"; s[0] = s[0].to_uppercase(); 但是&strs不能像这样被索引。我能够做到的唯一方法似乎太复杂了。我将转换&str为迭代器,将迭代器转换为向量,大写向量中的第一项,这将创建一个迭代器,并将其索引到其中,创建一个Option,然后将其解开以得到大写的第一个字母。然后,将向量转换为迭代器,然后将其转换为String,然后将其转换为&str。 let s1 = "foobar"; let mut v: Vec<char> = s1.chars().collect(); v[0] = v[0].to_uppercase().nth(0).unwrap(); let s2: String = v.into_iter().collect(); let s3 = &s2; 有比这更简单的方法吗?如果不是,为什么Rust这样设计? 类似问题
81 string  rust  uppercase 

2
use和extern有什么区别?
我是Rust的新手。我认为这use用于将标识符导入当前作用域,extern并用于声明外部模块。但是这种理解(也许是错误的)对我来说没有任何意义。有人可以解释为什么Rust具有这两个概念,以及使用它们的合适案例是什么?
81 rust 

4
安装rustup之后未配置默认工具链
我使用rustup安装了Rust ,但是当我尝试在控制台中输入诸如cargo或的Rust命令时rustc,出现以下错误: error: no default toolchain configured 这是一个已知的问题?我正在使用Windows 7。
81 rust 



4
什么是C ++上下文的单态化?
戴夫·赫尔曼(Dave Herman)最近在Rust的演讲中说,他们从C ++借用了此属性。我找不到关于该主题的任何内容。有人可以解释一下单质化的含义吗?
78 c++  rust 

1
什么是板条箱属性,应在何处添加?
为了了解Rust的工作原理,我决定看一个名为Iota的基于终端的小型文本编辑器。我克隆了存储库,然后cargo build被告知: error: *if let* syntax is experimental help: add #![feature(if_let)] to the crate attributes to enable 我应该在哪里添加#![feature(if_let)]到板条箱属性?
78 rust  rust-cargo 


5
如何编写Rust单元测试以确保发生恐慌?
我有一个panic在某些情况下处于工作状态的Rust函数,我希望编写一个测试用例来验证该函数是否惊慌。除了assert!和assert_eq!宏,我什么也找不到。有测试这种情况的机制吗? 我可以产生一个新任务,并检查该任务是否紧急。是否有意义? 返回aResult<T, E>不适合我的情况。 我希望在我正在实现Add的Matrix类型中增加对特征的支持。这种添加的理想语法如下: let m = m1 + m2 + m3; 其中m1,m2,m3都是矩阵。因此,的结果类型add应为Matrix。像下面这样的东西太神秘了: let m = ((m1 + m2).unwrap() + m3).unwrap() 同时,该add()功能需要验证所添加的两个矩阵的维数相同。因此,add()如果尺寸不匹配,则需要惊慌。可用的选项是panic!()。

4
为特定大小创建零向量
我想使用在运行时确定的特定大小初始化零向量。 在C中,它将像: int main(void) { uint size = get_uchar(); int A[size][size]; memset(A, 0, size*size*sizeof(int)); } 这是我尝试在Rust中编写的辅助函数,但我认为切片语法0..size会冒犯编译器。此外,它看起来比C版本更冗长。有没有更惯用的方法来做到这一点? fn zeros(size: u32) -> Vec<i32> { let mut zero_vec: Vec<i32> = Vec::with_capacity(size); for i in 0..size { zero_vec.push(0); } return zero_vec; } 我发誓以前的文档曾经在这里解释一种from_elem()方法,但这种表示法的排列似乎都不起作用[0 ; size] 我想最终将其粘贴到子字符串搜索算法中: pub fn kmp(text: &str, pattern: &str) -> i64 …
76 rust 

3
当Iterator :: map返回Result :: Err时,如何停止迭代并返回错误?
我有一个返回的函数Result: fn find(id: &Id) -> Result<Item, ItemError> { // ... } 然后另一个像这样使用它: let parent_items: Vec<Item> = parent_ids.iter() .map(|id| find(id).unwrap()) .collect(); 如何处理任何map迭代中的失败情况? 我知道我可以使用flat_map,在这种情况下,错误结果将被忽略: let parent_items: Vec<Item> = parent_ids.iter() .flat_map(|id| find(id).into_iter()) .collect(); Result的迭代器根据成功状态有0或1个项目,flat_map如果为0 ,则会将其过滤掉。 但是,我不想忽略错误,而是想使整个代码块停止并返回一个新错误(基于映射内出现的错误,或者仅转发现有错误)。 我如何在Rust中最好地解决这个问题?
76 rust  rust-result 

2
如何在Rust中编写函数?
我正在尝试编写一个包含两个功能的功能。初始设计非常简单:一个函数需要两个函数并返回一个组合函数,然后我可以将其与其他函数组合起来,因为Rust没有休息参数。我碰到了令人沮丧的无助编译器错误。 我的撰写功能: fn compose<'a, A, B, C, G, F>(f: F, g: G) -> Box<Fn(A) -> C + 'a> where F: 'a + Fn(A) -> B + Sized, G: 'a + Fn(B) -> C + Sized, { Box::new(move |x| g(f(x))) } 我想如何使用它: fn main() { let addAndMultiply = compose(|x| x * …

5
如何打印Vec?
我尝试了以下代码: fn main() { let v2 = vec![1; 10]; println!("{}", v2); } 但是编译器抱怨: error[E0277]: `std::vec::Vec<{integer}>` doesn't implement `std::fmt::Display` --> src/main.rs:3:20 | 3 | println!("{}", v2); | ^^ `std::vec::Vec<{integer}>` cannot be formatted with the default formatter | = help: the trait `std::fmt::Display` is not implemented for `std::vec::Vec<{integer}>` = note: in format …
75 rust  println 

1
for <>语法与常规生存期绑定有何不同?
考虑以下代码: trait Trait&lt;T&gt; {} fn foo&lt;'a&gt;(_b: Box&lt;dyn Trait&lt;&amp;'a usize&gt;&gt;) {} fn bar(_b: Box&lt;dyn for&lt;'a&gt; Trait&lt;&amp;'a usize&gt;&gt;) {} 这两个函数foo和bar似乎都接受a Box&lt;Trait&lt;&amp;'a usize&gt;&gt;,尽管foo它比bar。它们之间有什么区别? 另外,在什么情况下我需要for&lt;&gt;上述语法?我知道Rust标准库在内部使用它(通常与闭包相关),但是为什么我的代码需要它?
75 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.