web-dev-qa-db-ja.com

引数として渡された配列のサイズを取得する

これはうまくいかないようです。タイプ「&[String]」に「len」が存在しないというエラーが発生し続けます。

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

私はまだRustの新人ですが、これはどこかで生の文字列へのポインタであることを理解しています。実行時に基になる文字列の長さを取得できないのはなぜですか? 「Rustでの文字列の長さ」や「Rustでの配列の長さ」などのグーグル処理を行うと、どこにも絶対につながりません。

19
Steve

もちろん、それは可能です-lenはフィールドではなく、メソッドです。

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

Rustの学習を始めただけの場合は、 公式ブック を一読する必要があります。_&[str]_が意味をなさない理由もわかります(つまり、strはサイズなしの型であり、配列を作成することはできません。代わりに、借用した文字列には_&str_を、所有する文字列にはStringを使用する必要があります。どこかに_Vec<String>_があり、簡単にできます_&[String]_を取得します)。

関数に文字列または文字列の配列を渡すかどうかは明確ではないことも付け加えておきます。文字列の場合は、次のように記述します

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

ただし、文字列に対してlen()を使用すると、必要な長さではないバイト長が返されます(バイト長!=一般に「文字」の長さ、使用する「文字」の定義に関係なく)。 RustではUTF-8であり、UTF-8は可変幅エンコーディングです)。

また、testLengthを_test_length_に変更したことに注意してください。これは、snake_caseがRustプログラムの規約として受け入れられているためです。

30