小编Mor*_*hne的帖子

Rust中的多行整数文字

我有以下整数文字:

let centre: u64 = 0b00000000_00000000_00111100_00111100_00111100_00111100_00000000_00000000;
Run Code Online (Sandbox Code Playgroud)

它代表了一个国际象棋棋盘,所以我认为将它格式化得更好,类似于:

let centre: u64 = 0b
                  00000000
                  00000000
                  00111100
                  00111100
                  00111100
                  00111100
                  00000000
                  00000000;
Run Code Online (Sandbox Code Playgroud)

但是,上面的示例不会编译,因为换行符被解释为我的文字中的空格.有没有办法实现这个目标?

rust

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

如何根据 Cargo 功能选择性地传递 rustc 标志?

-C target-cpu=native 当标志传递给时,我正在编写的程序运行得更快rustc。我想为用户提供一种简单的、独立于平台的方式来在编译时启用此功能,因此我cpu_native = []在 Cargo.toml 中添加了 Cargo 功能,并在我的项目中创建了这个 Cargo 配置:

[target.'cfg(cpu_native)']
rustflags = ["-C", "target-cpu=native"]
Run Code Online (Sandbox Code Playgroud)

然而,这对我的程序没有影响,传递--features cpu_native给 Cargo 甚至不会触发重新编译。更改为以下 Cargo 配置确实会强制使用更快的指令重新编译:

[build]
rustflags = ["-C", "target-cpu=native"]
Run Code Online (Sandbox Code Playgroud)

然而,这将target-cpu=native使用默认的 Cargo 功能进行编译,这不是我想要的。从货物书中,我想要的似乎是可能的,但我不明白我做错了什么。

rust rust-cargo

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

连接两个迭代器,同时懒洋洋地构建第二个迭代器

我想像这样的方法Iterator::chain()只在需要时计算参数迭代器.在以下代码中,expensive_function永远不应该调用:

use std::{thread, time};

fn expensive_function() -> Vec<u64> {
    thread::sleep(time::Duration::from_secs(5));
    vec![4, 5, 6]
}

pub fn main() {
    let nums = [1, 2, 3];
    for &i in nums.iter().chain(expensive_function().iter()) {
        if i > 2 {
            break;
        } else {
            println!("{}", i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

rust

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

具有比supertrait更严格的相关类型边界的特征

我有一个简单的特征,其关联类型没有边界.

trait Board {
    type Move;
    fn moves(&self) -> Vec<Self::Move>;
}
Run Code Online (Sandbox Code Playgroud)

我也想把这个特性用作超级特征.特别是,我希望我的新子特征对相关类型有更严格的界限.像这样的东西:

trait TextBoard: Board {
    type Move: fmt::Debug; // Trying to tighten bounds on associated type
    fn printMoves(&self) {
        println!("{:?}", self.moves());
    }
}
Run Code Online (Sandbox Code Playgroud)

这个例子是高度简化的,但似乎显示了问题:编译器认为我正在尝试创建一个新的关联类型,但我只是想让子文章需要更严格的边界.有没有办法实现这个目标?

rust

2
推荐指数
1
解决办法
197
查看次数

将RefCell &lt;&mut T&gt;的内容传递给函数

在借用的RefCell<&mut T>(即a Ref<&mut T>)上调用方法可以按预期工作,但是我似乎无法将其传递给函数。考虑以下代码:

use std::cell::RefCell;

fn main() {
    let mut nums = vec![1, 2, 3];
    foo(&mut nums);
    println!("{:?}", nums);
}

fn foo(nums: &mut Vec<usize>) {
    let num_cell = RefCell::new(nums);

    num_cell.borrow_mut().push(4);

    push_5(*num_cell.borrow_mut());
}

fn push_5(nums: &mut Vec<usize>) {
    nums.push(4);
}
Run Code Online (Sandbox Code Playgroud)

num_cell.borrow_mut().push(4)可以,但是push_5(*num_cell.borrow_mut())出现以下错误:

use std::cell::RefCell;

fn main() {
    let mut nums = vec![1, 2, 3];
    foo(&mut nums);
    println!("{:?}", nums);
}

fn foo(nums: &mut Vec<usize>) {
    let num_cell = RefCell::new(nums);

    num_cell.borrow_mut().push(4);

    push_5(*num_cell.borrow_mut());
}

fn push_5(nums: &mut Vec<usize>) …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
268
查看次数

标签 统计

rust ×5

rust-cargo ×1