获取作为参数传入的数组的大小

Ste*_*eve 19 arrays slice rust

我似乎无法做到这一点.我一直收到一个错误,说'len'在类型'&[str]'上不存在.

fn testLength(arr: &[String]) {
    if arr.len >= 10 {
        // Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

我还是Rust的新手,我知道这是一个指向原始字符串的指针.为什么我不能在运行时获取底层字符串的长度?谷歌搜索"生锈中的绳子长度"和"生锈中的阵列长度"这些东西绝对没有让我感到满意.

Vla*_*eev 30

当然,你可以做到 - 它只是len不是一个领域,它是一种方法:

fn test_length(arr: &[String]){
    if arr.len() >= 10 {
        // Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你刚开始学习Rust,你应该阅读官方书籍 - 你也会发现为什么&[str]没有意义(简而言之,str是未经过类型化的,你不能创建它的数组;而&str应该用于借用的字符串并String为所有的字符串;最有可能你有一个Vec<String>地方,你可以很容易地得到&[String]了它).

我还要补充一点,目前尚不清楚是否要将字符串或字符串数​​组传递给函数.如果它是一个字符串,那么你应该写

fn test_length(arr: &str) {
    if arr.len() >= 10 {
        // Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

len() 但是,在一个字符串上,返回长度(以字节为单位),这可能不是你需要的长度(长度以字节为单位!="字符"中的长度,一般来说,无论你使用什么"字符"的定义,因为字符串在Rust中是UTF-8 ,UTF-8是一种可变宽度编码).

请注意,我也改为testLength,test_length因为snake_case是Rust程序的公认约定.