今年の言語はRust その6

Rustを学びます

勉強ページは日本語ドキュメント

プログラミング言語Rust

Rustの日本語ドキュメント 2nd Edition
https://doc.rust-jp.rs/book/second-edition/

オリジナル
https://doc.rust-lang.org/book/

4. 所有権を理解する

4.3 スライス

fn main(){

    let s = String::from("hello world");

    let hello = &s[0..5];
    let world = &s[6..11];

    let hello = &s[..5];
    let world = &s[6..s.len()];

    let hello_world = &s[..s.len()];

}

スライスを返す関数

fn main(){

    let s = String::from("hello world");

    let w = first_word(&s);

    println!("'{}': first word = {}", s,  w);


}


fn first_word(s: &String) -> &str{
    let bytes = s.as_bytes();

    for (i, &item) in bytes.iter().enumerate(){
        if item ==  b' '{
            return &s[0..i];
        }
    }

    &s[..]
}

実用?で考えてみる
関数の引数はスライス参照にしておけばOK!!
これで、文字列リテラルも文字列も受け取れる!

fn main() {


    // 「String型」の場合
    let my_string = String::from("hello world");

    let word = first_word(&my_string[..]); // <- スライスして渡す

    // 「文字列リテラル」の場合
    let my_string_literal = "hello world";

    let word = first_word(&my_string_literal[..]); // <- スライスして渡す

    let word = first_word(my_string_literal); // スライスなのでそのまま渡してoK


}

fn first_word(s: &str) -> &str {
    let bytes = s.as_bytes();

    for (i, &item) in bytes.iter().enumerate() {
        if item == b' ' {
            return &s[0..i];
        }
    }

    &s[..]
}

配列もスライスできる!

fn main() {

    let a = [1, 2, 3, 4, 5];

    let slice = &a[1..4];


}

スライスはPython等では標準実装されているので理解できた。
文字列と文字列リテラルの違いと関数の受け方はRust的。

理解した!

次回!

イエス!

广告
将在 10 秒后关闭
bannerAds