今年の言語は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的。
理解した!
次回!
イエス!