相关疑难解决方法(0)

Rust中的.. =(点点等于)运算符是什么?

..=在一些Rust代码中看到了这个运算符:

for s in 2..=9 {
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

它是什么?

syntax operators rust

20
推荐指数
1
解决办法
703
查看次数

在Rust中,Haskell的[n..m]的惯用等价物是什么?

如何生成包含Rust中所有整数的列表?我正在寻找相当于Haskell [n..m]或Python的,range(n, m+1)但找不到任何东西.

我知道这个int::range功能,并认为这是我正在寻找的东西,但它是在一个范围内迭代,而不是产生它.

rust

16
推荐指数
4
解决办法
1498
查看次数

黎曼和的收敛速度比高阶多项式近似更快

我的函数实现的实验结果有些问题,我希望其他人验证我使用的函数在逻辑上是合理的.

上下文:对于某个编程/数学问题,我需要计算连续间隔内的平均值到给定精度的10个小数位.该函数相当复杂并且涉及两个维度,因此我更喜欢在计算连续平均值(因此必须在两个维度中集成函数)时执行和近似.

为了帮助我,我一直在研究Rust中的一组近似函数.它们使用Riemann和,梯形法则或Simpson规则计算具有固定增量f的区间内函数的离散平均值,具体取决于实现:a..bdelta

pub fn riemann_avg<F>(a: f64, b: f64, delta: f64, f: F) -> f64
where
    F: Fn(f64) -> f64
{
    let n = ((b - a) / delta) as usize;

    (0..n)
        .map(|i| (i as f64) * delta)
        .map(f)
        .sum::<f64>() / (n as f64)
}


pub fn trapezoidal_avg<F>(a: f64, b: f64, delta: f64, f: F) -> f64
where
    F: Fn(f64) -> f64
{
    let n = ((b - a) / delta) as usize;

    (0..n)
        .map(|i| …
Run Code Online (Sandbox Code Playgroud)

math calculus rust

7
推荐指数
2
解决办法
144
查看次数

范围文字和范围模式(例如,`...` 和`..=` 之间)有什么区别?

Rust Book的Operators and Symbols附录列出了两个都是右包含范围的运算符:

操作员 例子 解释
..= ..=expr, expr..=expr 包含右侧的范围字面量
... expr...expr 在模式中:包含范围模式

这两个运营商有什么区别?或者,换种说法,范围文字和范围模式之间有什么区别?

'In a pattern' 表示expr...expr必须在匹配表达式中使用,expr..=expr而不应该使用。为什么是这样?

rust

7
推荐指数
1
解决办法
131
查看次数

如何迭代所有字节值(`0..256`中的overflowing_literals)

我正在尝试迭代所有可能的byte(u8)值.不幸的是在我的范围内的文字0..256被强制转换为u8256溢出:

fn foo(byte: u8) {
    println!("{}", byte);
}

fn main() {
    for byte in 0..256 {
        foo(byte);
        println!("Never executed.");
    }
    for byte in 0..1 {
        foo(byte);
        println!("Executed once.");
    }
}
Run Code Online (Sandbox Code Playgroud)

以上编译:

warning: literal out of range for u8
 --> src/main.rs:6:20
  |
6 |     for byte in 0..256 {
  |                    ^^^
  |
  = note: #[warn(overflowing_literals)] on by default
Run Code Online (Sandbox Code Playgroud)

第一个循环体永远不会被执行.

由于演员阵容,我的解决方法非常难看并且感觉很脆弱:

for short in 0..256 {
    let _explicit_type: u16 = short;
    foo(short as u8); …
Run Code Online (Sandbox Code Playgroud)

rust

4
推荐指数
2
解决办法
729
查看次数

为什么不能收集一系列的char?

我正在尝试生成包含小写ASCII字符的向量.这种更复杂的方法有效:

let ascii_lowercase = (b'a'..=b'z').map(|b| b as char).collect::<Vec<char>>();
Run Code Online (Sandbox Code Playgroud)

但是,我首先提出的这个更直接的方法并不是:

let ascii_lowercase = ('a'..='z').collect::<Vec<char>>();
Run Code Online (Sandbox Code Playgroud)

错误是:

error[E0599]: no method named `collect` found for type `std::ops::RangeInclusive<char>` in the current scope
 --> src/main.rs:2:39
  |
2 |     let ascii_lowercase = ('a'..='z').collect::<Vec<char>>();
  |                                       ^^^^^^^
  |
  = note: the method `collect` exists but the following trait bounds were not satisfied:
          `std::ops::RangeInclusive<char> : std::iter::Iterator`
          `&mut std::ops::RangeInclusive<char> : std::iter::Iterator`
Run Code Online (Sandbox Code Playgroud)

这是奇怪的,因为据我了解,有一个铺盖实现IteratorRangeInclusive.

是否不可能使用一系列字符作为迭代器?如果是这样,为什么?如果没有,我做错了什么?我正在使用稳定的Rust 2018 1.31.1.

collections iterator rust

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

如何编写一个循环,打印出Rust中0到99之间的数字?

这个问题使用早于Rust 1.0的语法,但概念是通用的,并且许多答案已经更新以反映稳定的Rust 1.0.

这个问题是程序员在学习Rust时可能尝试的一个非常基本的问题.

你不能问一个关于Rust语言的简单问题,我不认为,但我是一名有30年经验的程序员,我无法理解.

我认为它int::range与闭包有关.

这是我在Rust的早期版本(1.0之前版)中所写的内容.

fn main() {
    int::range(0, 100, {|i| 
        io::println(i);
    });
}
Run Code Online (Sandbox Code Playgroud)

这会创建可爱的错误消息,我不知道如何修复:

hello.rs:3:19: 5:2 error: mismatched types: expected `&fn(int) -> bool` but found `()` (expected fn but found ())
hello.rs:3 int::range(0, 100, {|i| 
hello.rs:4     io::println(i);
hello.rs:5 });
Run Code Online (Sandbox Code Playgroud)

它如何打印出我的整个功能体,这很有趣,但我仍然不知道那是&fn(int) ->b ool什么意思.我隐约怀疑有一个迭代器的闭包体没有声明任何返回类型在Rust中明确禁止,这让我感到困惑.

rust

3
推荐指数
2
解决办法
344
查看次数

如何迭代向后范围?

我正在尝试创建pub fn sing(start: i32, end: i32) -> String它返回一个串联的字符串,pub fn verse(num: i32) -> String重复调用每个数字之间startend.

我用google搜索答案,看起来Rust String连接回答了我的问题,如果我甚至在操场上编写我的代码就行了,但是:

我的代码:

pub fn verse(num: i32) -> String {
    match num {
        0 => "No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n".to_string(),
        1 => "1 bottle of beer on the wall, 1 bottle of beer.\nTake …
Run Code Online (Sandbox Code Playgroud)

iterator match rust

0
推荐指数
1
解决办法
212
查看次数

标签 统计

rust ×8

iterator ×2

calculus ×1

collections ×1

match ×1

math ×1

operators ×1

syntax ×1