小编jts*_*jts的帖子

为什么 Rust 中作为参数传递的 &str 数组有不同的生命周期?

我正在学习 Rust,并正在通过函数测试一些数组复制。我确信有内置的 Rust 函数可以复制/克隆数组信息,但我认为个人实现是一个好主意,可以帮助我理解通过函数传递引用。

fn copy_str_arr_original (a1: [&str; 60], a2: &mut [&str; 60]) {
    // copy 1 into 2
    for i in 0..60 {
        a2[i] = a1[i];
    } // change is reflected in a2 as it is passed as &mut
}
Run Code Online (Sandbox Code Playgroud)

these two types are declared with different lifetimes...然而,这引发了类型本身的错误&str。经过进一步的研究,我尝试声明我自己的一生并将它们分配给它,这解决了问题!

fn copy_str_arr_fix<'a> (a1: [&'a str; 60], a2: &mut [&'a str; 60]) {
    // copy 1 into 2
    for i in 0..60 {
        a2[i] = a1[i];
    } // change …
Run Code Online (Sandbox Code Playgroud)

arrays function lifetime rust

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

在 Rust 中构建新字符串的有效方法

我最近刚刚开始学习 Rust,并且一直在摆弄一些代码。我想创建一个简单的函数,从字符串中删除元音并返回一个新字符串。下面的代码可以运行,但我担心这是否真的是这种语言中有效的、典型的方法,或者我是否遗漏了一些东西......

// remove vowels by building a String using .contains() on a vowel array
fn remove_vowels(s: String) -> String {
    let mut no_vowels: String = String::new();
    for c in s.chars() {
        if !['a', 'e', 'i', 'o', 'u'].contains(&c) {
            no_vowels += &c.to_string();
        }
    }
    return no_vowels;
}
Run Code Online (Sandbox Code Playgroud)

首先,使用to_string()构造一个新的字符串,然后使用&借用似乎不太合适。是否有更简单的方法将字符附加到字符串,或者这是唯一的方法?或者我应该完全重写它并使用循环按其长度而不是按字符数组迭代输入的字符串?

另外,我还得知,Rust 中很流行不使用 return 语句,而是让最后一个表达式从函数返回值。这里是否需要我的返回语句,或者是否有更干净的方法来返回遵循约定的值?

string character rust borrow-checker

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

标签 统计

rust ×2

arrays ×1

borrow-checker ×1

character ×1

function ×1

lifetime ×1

string ×1