Получение размера массива, переданного в качестве аргумента

Я не могу заставить это работать. Я получаю сообщение об ошибке, в котором говорится, что "len" не существует для типа "& [String]".

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

Я все еще довольно новичок в Rust, и я понимаю, что это указатель на необработанную строку где-то. Почему я не могу получить длину базовой строки во время выполнения? Такие вещи, как "длина строки в ржавчине" и "длина массива в ржавчине", совершенно меня не ведут.

Ответ 1

Конечно, вы можете это сделать - просто len не является полем, это метод:

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

Если вы только начали изучать Rust, вы должны прочитать официальную книгу - вы также узнаете, почему &[str] не имеет смысла (короче говоря, str is notized type, и вы не можете создать его массив; вместо этого &str следует использовать для заимствованных строк и String для принадлежащих строк; скорее всего, у вас есть Vec<String> где-то, и вы можете легко получить &[String] из него).

Я бы также добавил, что неясно, хотите ли вы передать строку или массив строк в функцию. Если это строка, вы должны написать

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

len() в строке, однако, возвращает длину в байтах, которая может быть не то, что вам нужно (длина в байтах!= длина в "символах" вообще, независимо от определения "символа", который вы используете, поскольку строки в UTF-8 в Rust, а UTF-8 - кодирование с переменной шириной).

Обратите внимание, что я также изменил testLength на test_length, потому что snake_case является принятым соглашением для программ Rust.