gpt4 book ai didi

arrays - 将字符串数组传递给函数而无需指定 N(编译时间常数)

转载 作者:行者123 更新时间:2023-11-29 08:11:30 25 4
gpt4 key购买 nike

运行以下代码:

fn last_el(arr: [&str; 2]) -> usize {
arr.len() - 1
}

fn main() {
let names = ["this", "that"];
println!("{}", names[last_el(names)]);
}

然而,它只对 [&str; 2] 和 2 必须匹配 names 中的元素数量。例如,以下代码编译失败:

fn last_el(arr: [&str]) -> usize {
arr.len() - 1
}

fn main(){
let names = ["this","that"];
println!("{}", names[last_el(names)]);
}

我应该怎样写才能不必指定 N

我知道 arr.len() - 1 可能比尝试编写一个做同样事情的函数更让人头疼,但就理解函数如何接受字符串数组而言他们,为什么第二个例子编译失败?

最佳答案

[&str] 是未调整大小的类型。您不能直接操作未确定大小的类型的值,它们需要位于引用或指针后面。在您的情况下,您应该使用 &[&str](也称为 slice)。

fn last_el(arr: &[&str]) -> usize {
arr.len() - 1
}

fn main() {
let names = ["this", "that"];
println!("{}", names[last_el(&names)]);
}

我还会注意到有一个 last()切片上定义的方法。它会像这样使用:

fn main() {
let names = ["this", "that"];
println!("{}", names.last().unwrap());
}

关于arrays - 将字符串数组传递给函数而无需指定 N(编译时间常数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43175121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com