let n1: f32 = 1.0f32;
let n2: isize = 0xF1A; // 16進数
let n3: isize = 0b11001; // 2進数
let s1: &str = r"hello world";
let s2: &str = r#"hello world"#;
let b1: u8 = b'A';
let b2: &[u8] = b"hello";
let b3: &[u8] = br#"hello"#;
let x = Some("foo");
assert_eq!(x.ok_or(0), Ok("foo"));
let x: Option<&str> = None;
assert_eq!(x.ok_or(0), Err(0));
- std::path::Pathとstd::path::PathBufは&strとStringの関係に相当する。(実体とスライス)
- Pathを引数などに使う場合はT: AsRefを受け取る。
- PuthBufのset_file_nameはfile_nameメソッドでファイル名と判定されたファイル名を置き換えてしまう。
- 単純にファイル名を追加する場合はpushメソッドを使う。
use std::path::PathBuf;
fn main() {
let mut p = PathBuf::from("/test/test/");
p.set_file_name("bar.txt");
assert_eq!(p, PathBuf::from("/test/bar.txt"));
}
- RustのファイルI/OにはBufReader, BufWriterを使いましょう
- std::fs::Fileのwriteとreadはバッファリングされていないため
use std::fs;
use std::io::{BufWriter, Write};
fn main() {
let b = b"test";
let mut f = BufWriter::new(fs::File::create("rs.dump").unwrap());
for _ in 0 .. 100_000_000 {
f.write(b).unwrap();
}
}
use std::{fs, mem};
use std::io::{BufReader, Read};
fn main() {
let mut f = BufReader::new(fs::File::open("rs.dump").unwrap());
let mut b: [u8; 4] = unsafe { mem::uninitialized() };
for _ in 0 .. 100_000_000 {
f.read_exact(&mut b).unwrap();
}
}
- FileをOpenしてstringとして読み込む場合、便利メソッドがある。
#![feature(fs_read_write)]
use std::fs;
use std::net::SocketAddr;
fn main() -> Result<(), Box<std::error::Error + 'static>> {
let foo: SocketAddr = fs::read_to_string("address.txt")?.parse()?;
Ok(())
}