|
Rustの文字列リテラルの型が&str。
let s: &str = "abc";
文字列リテラルはダブルクォーテーションで囲む。中で改行も出来る。
関数(やメソッド)の引数として文字列を受け取りたい場合は&strで受ければいい。
fn example1(s: &str) { println!("{}", s); }
引数の型を&strにしておくと、呼び出す側は、文字列リテラル(&str)の他に&Stringでも渡すことが出来る。
example1("abc"); let s: String = String::from("abc"); example1(&s);
関数の返り値として文字列リテラルを返したい場合は、&strにライフタイム('static
とか)を指定する。
fn example2() -> &'static str { "abc" }
しかし、文字列を返したい場合はStringを使うことの方が多いような気がする。
Rustでは関数のオーバーロードを作れない(引数の型が異なる同名関数を作れない)が、ひとつの関数の引数で&strとOption<&str>のどちらでも受け取れるようにすることが出来る。
(何故そんなことをしたいかと言うと、Rustでは&strにnullを保持できないので、普段は&strで受け取りつつ、何も無いときはNoneが渡せると便利だから)
fn example3<'a, T: Into<Option<&'a str>>>(s: T) { let s: Option<&str> = s.into(); match s { Some(s) => println!("{}", s), None => println!("None"), } }
example3("abc"); example3(None);