Конечно, вы можете это сделать - это просто len
не поле, это метод:
fn test_length(arr: &[String]){
if arr.len() >= 10 {
// Do stuff
}
}
Если вы только начали изучать Rust, вы должны прочитать official book - вы также найдете, почему &[str]
не имеет смысла (короче говоря, str
- это нестандартный тип, и вы не можете создать его массив; вместо этого &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.
Так что я бы не использовал & [str] вообще? Что, если мне нужен массив заимствованных строк? Будет ли это [& str]? – Steve
@Steve, yes, '& [& str]' - это фрагмент заимствованных строк (а не массивы - массивы имеют фиксированный размер и их типы выглядят как '[&str; 123]'). '& [str]' не является допустимым типом - 'T' в' & [T] 'должен быть размером (реализовать' Sized' trait), потому что срезы указывают на последовательность элементов, которые выложены в памяти равномерно. Это требует, чтобы каждый элемент имел определенный размер. 'str' не имеет определенного размера, поэтому он не реализует' Sized' и не может использоваться в массивах. Кроме того, также нет способа построить bare 'str'. –
Благодарим за помощь! – Steve