Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

文字列への変換と文字列からの変換

String への変換

任意の型を String に変換するには、その型に ToString トレイトを実装するだけで済みます。ただし、直接そうするのではなく、 fmt::Display トレイトを実装すべきです。これにより ToString が自動的に提供され、 print! のセクションで説明したように、その型を出力できるようにもなります。

use std::fmt;

struct Circle {
    radius: i32
}

impl fmt::Display for Circle {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Circle of radius {}", self.radius)
    }
}

fn main() {
    let circle = Circle { radius: 6 };
    println!("{}", circle.to_string());
}

文字列のパース

文字列を多くの型に変換できると便利ですが、より一般的な文字列操作の 1 つは、 文字列から数値に変換することです。これに対する慣用的なアプローチは、 parse 関数を使用し、型推論が働くようにするか、'turbofish' 構文を使って パースする型を指定することです。次の例では、両方の方法を示しています。

これは、その型に FromStr トレイトが実装されている限り、文字列を指定された型に変換します。 これは標準ライブラリ内の多数の型に対して実装されています。

fn main() {
    let parsed: i32 = "5".parse().unwrap();
    let turbo_parsed = "10".parse::<i32>().unwrap();

    let sum = parsed + turbo_parsed;
    println!("Sum: {:?}", sum);
}

ユーザー定義型でこの機能を利用するには、その型に FromStr トレイトを実装するだけです。

use std::num::ParseIntError;
use std::str::FromStr;

#[derive(Debug)]
struct Circle {
    radius: i32,
}

impl FromStr for Circle {
    type Err = ParseIntError;
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s.trim().parse() {
            Ok(num) => Ok(Circle{ radius: num }),
            Err(e) => Err(e),
        }
    }
}

fn main() {
    let radius = "    3 ";
    let circle: Circle = radius.parse().unwrap();
    println!("{:?}", circle);
}