从 Rust 元组内的自有盒子借用

sim*_*m82 1 rust borrowing

主要目标是访问元组内拥有的框,例如(String, i32)下面代码中的字符串。

我的第一个意图是使用let装订从拥有的盒子中借用。借用适用于非元组情况 (1),但不适用于涉及元组的情况 (2)。

我的意图是否错误,如果是,是否还有另一种惯用的方法来访问字符串?

示例代码:

fn main() {
    // 1. Normal borrowing
    let s: String = "blub".to_string();
    let sr: &str = &s; // this works

    // 2. Borrowing from a tuple
    let st = ("blub".to_string(), 1);
    let (st_r, i): (&str, i32) = st; // error: mismatched types:

    println!( "{} {} {} {}", s, sr, st_r, i);
}
Run Code Online (Sandbox Code Playgroud)

编译器错误是:

error: mismatched types:
 expected `(&str, i32)`,
    found `(collections::string::String, _)`
Run Code Online (Sandbox Code Playgroud)

A.B*_*.B. 5

ref关键字用于通过引用进行绑定。

let (ref st_r, i) = st;
Run Code Online (Sandbox Code Playgroud)