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

时间:2015-05-06 15:11:30

标签: arrays rust slice

我似乎无法完成这项工作。我一直收到一个错误,说'len'在类型'& [str]'上不存在。

fn testLength(arr: &[str]) {
    if arr.len >= 10 {
        // Do stuff
    }
}

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

1 个答案:

答案 0 :(得分:29)

当然,你可以这样做 - 它只是len不是一个字段,它是一种方法:

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

如果你刚开始学习Rust,你应该通读official book - 你也会发现为什么&[str]没有意义(简而言之,str是未确定类型的,而你不能创建它的数组;而{(1}}应该用于借用的字符串,而&str用于拥有的字符串;很可能你在某个地方有一个String,你很容易得到Vec<String> 1}}出来的。)

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

&[String]
但是,字符串上的

fn test_length(arr: &str) { if arr.len() >= 10 { // Do stuff } } 会返回以字节为单位的长度,这可能不是您需要的长度(长度以字节为单位!=“字符”中的长度,一般来说,您使用的“字符”的定义,因为Rust的字符串是UTF-8,UTF-8是可变宽度编码。

请注意,我还将len()更改为testLength,因为snake_case是Rust程序的公认约定。