rust
わかっていない記法をわかるまとめ
code:rust
pub fn from_utf8(vec: Vec<u8>) -> Result<String, FromUtf8Error> {
match str::from_utf8(&vec) {
Ok(..) => Ok(String { vec }),
Err(e) => Err(FromUtf8Error { bytes: vec, error: e }),
}
}
Stringより。 .. とは
answer: _ が無視(ムーブしない)に対して、.. は名付けしない、らしい
code:rust
impl Distribution<Fp> for Standard {
fn sample<R>(&self, rng: &mut R) -> Fp
where
R: Rng + ?Sized,
{
Fp(rng.gen_range(0, P))
}
}
?Sized とは?
Sized はコンパイル時に長さが決定する型らしい
/// ?Sized can be used to remove this bound if it's not appropriate.
はん。
answer: Sized ではないことの明示。 たぶん、 u32 でも u64 でもその他何でも行けるぜという目的のためで、明示する目的はいまいちつかめない…
自動トレイトとは?
code:rust
/// fn main() -> std::io::Result<()> {
/// let mut file = File::create("foo.txt")?;
/// file.write_all(b"Hello, world!")?;
/// Ok(())
/// }
source: fs.rs より
? とは
code:shell
rustc:Error:E0277:the ? operator can only be used in a function that returns Result or Option (or another type that implements std::ops::Try) the trait std::ops::Try is not implemented for () required by std::ops::Try::from_error
はーん。
自動で上にぶち上げてくれる。
foo()?.bar()?.baz()?
これとか完全に JS に見えるな。
In Rust 2018 you can instead let your #tests and main functions return a Result: main が Resut 返せるようになったのは 2018 かららしい、やったー(のか?)
bin なら not 0 を返してくれるらしい、便利じゃん
あは、この 2018 がまさに cargo.toml に書いてある edition なのかー。
ES みたいなナンバリングするんだね、いい選択だ。
as って何?
Try的なtraitがあるわけではない。
基本は primitive 版の From/Into
同じサイズの int と uint は実際何もしない。 (使う上でこれは知っておきたい)
float と int は、、、まあ必要になったらまた見ればよいでしょう。
ポインタなどの低レイヤな部分を触る際にも重要
C++ の const_cast 的な事とかをやるなら、みたいな。