相关疑难解决方法(0)

如何在Rust中匹配字符串与字符串文字?

我正在试图弄清楚如何匹配StringRust.

我最初尝试过像这样的匹配,但我发现Rust不能暗中强制转换std::string::String&str.

fn main() {
    let stringthing = String::from("c");
    match stringthing {
        "a" => println!("0"),
        "b" => println!("1"),
        "c" => println!("2"),
    }
}
Run Code Online (Sandbox Code Playgroud)

这有错误:

error[E0308]: mismatched types
 --> src/main.rs:4:9
  |
4 |         "a" => println!("0"),
  |         ^^^ expected struct `std::string::String`, found reference
  |
  = note: expected type `std::string::String`
             found type `&'static str`
Run Code Online (Sandbox Code Playgroud)

然后我尝试构造新String对象,因为我找不到将a String转换为a的函数&str.

fn main() {
    let stringthing = String::from("c");
    match stringthing {
        String::from("a") => println!("0"),
        String::from("b") => …
Run Code Online (Sandbox Code Playgroud)

string match rust

153
推荐指数
4
解决办法
5万
查看次数

为什么不鼓励接受对String(&String),Vec(&Vec)或Box(&Box)的引用作为函数参数?

我写了一些Rust代码&String作为参数:

fn awesome_greeting(name: &String) {
    println!("Wow, you are awesome, {}!", name);
}
Run Code Online (Sandbox Code Playgroud)

我还编写了代码来引用a VecBox:

fn total_price(prices: &Vec<i32>) -> i32 {
    prices.iter().sum()
}

fn is_even(value: &Box<i32>) -> bool {
    **value % 2 == 0
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到一些反馈意见,这样做并不是一个好主意.为什么不?

string reference rust borrowing

100
推荐指数
2
解决办法
5549
查看次数

Rust中的immutable和const变量有什么区别?

我了解到,如果变量未使用显式声明为可变mut,则变为不可变(在声明后不能更改).那为什么我们const在Rust中有关键字?他们不一样吗?如果没有,它们有何不同?

const immutability rust

33
推荐指数
5
解决办法
5474
查看次数

使用非文字模式时,为什么此匹配模式无法访问?

以下代码(游乐场)

let max_column = 7;
edge = match current_column {
    0 => Edge::Left,
    max_column => Edge::Right,
    _ => Edge::NotAnEdge
};
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

warning: unreachable pattern
  --> src/main.rs:10:9
   |
9  |         max_column => Edge::Right,
   |         ---------- matches any value
10 |         _ => Edge::NotAnEdge
   |         ^ unreachable pattern
   |
   = note: #[warn(unreachable_patterns)] on by default
Run Code Online (Sandbox Code Playgroud)

max_column用文字替换变量可以正常工作:

let max_column = 7;
edge = match current_column {
    0 => Edge::Left,
    7 => Edge::Right,
    _ => Edge::NotAnEdge
};
Run Code Online (Sandbox Code Playgroud)

为什么_在第一个示例中无法访问任何值current_column …

rust

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

const变量和静态变量之间有什么区别?我应该选择哪个?

我从RFC 246中知道这一点:

  • 常量声明常量值.它们代表一个值,而不是内存地址.这是人们可以达到的最常见的事情,并且static几乎在所有情况下我们今天都会知道它.
  • 静态声明全局变量.这些代表一个内存地址.它们很少使用:主要用例是全局锁,全局原子计数器以及与传统C库的接口.

当我试图维护一张桌子时,我不知道两者之间究竟有什么不同.

我应该选择哪一个?

static const rust

4
推荐指数
3
解决办法
1403
查看次数

标签 统计

rust ×5

const ×2

string ×2

borrowing ×1

immutability ×1

match ×1

reference ×1

static ×1