#[derive(Debug, Clone, PartialEq)] struct Circle { x: f64, y: f64, radius: f64, } impl Circle { pub fn area(self) -> f64 { // std::f64::consts::PI * (self.radius * self.radius) std::f64::consts::PI * (3.1 * 3.1) } } fn main() { let a = Circle { x: 0.0, y: 0.0, radius: 2.0 }; let ref_a = &a; assert_eq!(a.clone(), ref_a.clone()); assert_eq!(ref_a.clone(), (*ref_a).clone()); }
実行するとエラーは発生しなかった。
a.clone() == ref_a.clone() == (*ref_a).clone()
なのだ。
Cloneトレイトの説明 を見るに、ref_a
が与えられたら (*ref_a.clone).clone()
としないと駄目でしょ、と思ってたんですけどそんなことはなかったです。
「暗黙的な参照外し」や「参照外し型強制」とか言うらしいですね。