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))
}
}
source: https://github.com/noshi91/n91lib_rs/blob/d29fba27e7e2deb0583a1290398d7e4764a21e23/src/other/fp.rs#L172-L179
?Sized とは?
Sized はコンパイル時に長さが決定する型らしい
/// ?Sized can be used to remove this bound if it's not appropriate.
はん。
answer: Sized ではないことの明示。 たぶん、 u32 でも u64 でもその他何でも行けるぜという目的のためで、明示する目的はいまいちつかめない…
自動トレイトとは?
answer: https://doc.rust-lang.org/reference/special-types-and-traits.html#auto-traits
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
はーん。
https://doc.rust-lang.org/edition-guide/rust-2018/error-handling-and-panics/the-question-mark-operator-for-easier-error-handling.html
自動で上にぶち上げてくれる。
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 って何?
https://doc.rust-lang.org/std/keyword.as.html
Try的なtraitがあるわけではない。
基本は primitive 版の From/Into
詳細なセマンティクスは https://doc.rust-lang.org/reference/expressions/operator-expr.html#type-cast-expressions
同じサイズの int と uint は実際何もしない。 (使う上でこれは知っておきたい)
float と int は、、、まあ必要になったらまた見ればよいでしょう。
ポインタなどの低レイヤな部分を触る際にも重要
C++ の const_cast 的な事とかをやるなら、みたいな。