小编pie*_*bot的帖子

Rust中的字符串相等性:引用和解除引用如何工作?

作为Rust新手,我正在解决Project Euler问题,以帮助我了解语言.问题4涉及回文,我找到了两个用于创建回文矢量的解决方案,但我不确定它们中的任何一个是如何工作的.

我正在使用一个字符串向量products,它的计算如下:

let mut products = Vec::new();
for i in 100..500 {
    for j in 500..1000 {
        products.push((i * j).to_string());
    }
}
Run Code Online (Sandbox Code Playgroud)

为了将这些产品过滤到只有回文的产品,我有以下两种解决方案:

解决方案1:

let palindromes: Vec<_> = products
    .iter()
    .filter(|&x| x == &x.chars().rev().collect::<String>())
    .collect();
Run Code Online (Sandbox Code Playgroud)

解决方案2:

let palindromes: Vec<_> = products
    .iter()
    .filter(|&x| *x == *x.chars().rev().collect::<String>())
    .collect();
Run Code Online (Sandbox Code Playgroud)

他们都产生了正确的结果,但我不明白为什么!

在解决方案1中,我们将字符串的引用与我们刚刚创建的字符串的引用进行比较?

在解决方案2中,我们取消引用对字符串的引用并将其与解除引用的新字符串进行比较?

我期望能做什么:

let palindromes: Vec<_> = products
    .iter()
    .filter(|x| x == x.chars().rev().collect::<String>())
    .collect();
Run Code Online (Sandbox Code Playgroud)

我希望有人能够向我解释:

  • 我的两个解决方案之间有什么区别,为什么它们都有效?
  • 为什么我不能x在我的过滤器功能中使用而不引用或取消引用它?

谢谢!

string dereference rust borrowing

6
推荐指数
1
解决办法
934
查看次数

如何更改VIM中的JSX缩进规则?

目前,我正在使用两个插件在 VIM 中格式化我的 JS(X) 代码:

  • pangloss/vim-javascript
  • mxw/vim-jsx

我们的团队选择,当我们的 React 组件的 props 溢出到多行时,我们希望这些属性与第一行的属性对齐,如下所示:

期望:

<Toggle label={dragString} toggled={this.props.canDrag} onToggle={this.toggleDrag}
        thumbStyle={toggleStyles.thumbOff}
        thumbSwitchedStyle={toggleStyles.thumbOn}
        trackStyle={toggleStyles.trackOff}
        trackSwitchedStyle={toggleStyles.trackOn}
/>
Run Code Online (Sandbox Code Playgroud)

相反,它看起来像vim-jsx总是在新行上将 props 缩进两个空格(这就是我们设置的制表符大小):

实际发生的情况:

<Toggle label={dragString} toggled={this.props.canDrag} onToggle={this.toggleDrag}
  thumbStyle={toggleStyles.thumbOff}
  thumbSwitchedStyle={toggleStyles.thumbOn}
  trackStyle={toggleStyles.trackOff}
  trackSwitchedStyle={toggleStyles.trackOn}
/>
Run Code Online (Sandbox Code Playgroud)

我可以在我的.vimrc或对vim-jsx插件代码中进行更改,以使新行上的 React 组件 props 与第一行上的 props 对齐吗?

vim jsx

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

如何在每个文件的基础上执行`货物工作台?

我正在解决Project Euler问题,我将每个问题都放在另一个文件中.当我尝试针对每个问题采用不同的方法时,我会在其各自的文件中为每个问题创建一系列基准.

我的目录结构如下:

euler/
    Cargo.lock
    Cargo.toml
    README.md
    src/
        main.rs
        p001.rs
        p002.rs
        ...etc.
Run Code Online (Sandbox Code Playgroud)

内容main.rs是:

#![feature(test)]

extern crate primes;
extern crate test;

mod p001;
mod p002;
// ... etc

fn main() {}
Run Code Online (Sandbox Code Playgroud)

当我运行时cargo bench,它会为我项目中的每个文件运行基准测试:

$ cargo bench
    Finished release [optimized] target(s) in 0.02 secs
     Running target/release/deps/euler_rust-5be87dff38a04da2

running 11 tests
test p001::bench_fold_sum                     ... bench:      12,955 ns/iter (+/- 13,501)
test p001::bench_for_sum                      ... bench:      11,385 ns/iter (+/- 7,383)
test p002::bench_for_sum                      ... bench:         270 ns/iter (+/- 90)
test p002::bench_takewhile_filter_mutable_sum ... …
Run Code Online (Sandbox Code Playgroud)

benchmarking rust rust-cargo

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

标签 统计

rust ×2

benchmarking ×1

borrowing ×1

dereference ×1

jsx ×1

rust-cargo ×1

string ×1

vim ×1