また、EqおよびOrdは比較が必ずできる(失敗しない)型に対して、PartialEqおよびPartialOrdは比較ができない場合がある型に対して実装します。i32型などの整数型には、前者の"Partial"なしのトレイトが実装されているのに対し、f64、f32などの浮動小数点型には後者の"Partial" 付きのトレイトが実装されています。浮動小数点型の場合にはNaN(Not A Number)との比較ができないため、"Partial"付きになっています。
正
また、同じ型の同じ値同士の等値比較において、EqやOrdはいつでも真となることを前提にできる型に実装できるのに対し、PartialEqおよびPartialOrdはそれを前提にできる型に加え、できない型にも実装できます(数学的な言葉でいえば、PartialEqやPartialOrdは「その型に属する値が反射律を満たすことを要求されない型」に対して実装できるものです)。EqやOrdが実装される型には、自動的にPartialEqやPartialOrdも実装されています(EqやOrdがPartialEqやPartialOrdのサブトレイト(p216参照)であるため)。たとえば、浮動小数点型f32、f64はNaN(Not A Number)という値を含んでいますが、NaN == NaNの等値比較の結果は偽となるため、これらの型には"Partial"付きのトレイトのみが実装されています。一方、i32型などの整数型には、"Partial"なし、および"Partial"付きの両方のトレイトが実装されています。
すなわち、x、yのラベルが貼られている同一のイミュータブルな変数の値があるときに、x = x + 1のような操作をした場合、その計算結果を格納する新しいメモリ領域が確保され、その新しいメモリ領域のラベルがxになります。このとき、yというラベルが貼られた元のメモリ領域の値はなんら影響を受けません(図3.8)。
P.58 図3.8
中央の図の内容に誤りがありました。以下が正しい図です。
誤
正
(以下2023年1月11日更新)
P.192 下から4行目
誤
Rc::clone()
正
Rc::new()
(以下2022年12月26日更新)
P.23 3行目
誤
std::fmt::Displayいうトレイト
正
std::fmt::Displayというトレイト
P.71 3つ目のコード囲み10行目
誤
myclear(&s);
正
myclear(s_ref);
P.142 リスト4.14のキャプション
誤
Result<T,E>}
正
Result<T,E>
余計な「}」がありました。
P.154 Pythonのコード 10行目
誤
print("The capital of {} is {}.".format(
正
print("The capital of {} is {}".format(
余計な「.」がありました。
P.154 Pythonのコード 14行目
誤
print(The capital of {} is not found.".format(tg))
正
print("The capital of {} is not found".format(tg))