Understanding the 'self' parameter in the context of trait implementations
<p>When implementing a trait, we often use the keyword <code>self</code>, a sample is as follows. I want to understand the representation of the many uses of <code>self</code> in this code sample. </p>

<pre><code>struct Circle {
    x: f64,
    y: f64,
    radius: f64,
}

trait HasArea {
    fn area(&amp;self) -&gt; f64;          // first self: &amp;self is equivalent to &amp;HasArea
}

impl HasArea for Circle {
    fn area(&amp;self) -&gt; f64 {         //second self: &amp;self is equivalent to &amp;Circle
        std::f64::consts::PI * (self.radius * self.radius) // third:self
    }
}
</code></pre>

<p>My understanding is: </p>

<ol>
<li>The first <code>self</code>: <code>&amp;self</code> is equivalent to <code>&amp;HasArea</code>. </li>
<li>The second <code>self</code>: <code>&amp;self</code> is equivalent to <code>&amp;Circle</code>. </li>
<li>Is the third <code>self</code> representing <code>Circle</code>? If so, if <code>self.radius</code> was used twice, will that cause a move problem?</li>
</ol>

<p>Additionally, more examples to show the different usage of the <code>self</code> keyword in varying context would be greatly appreciated. </p>