leisurely8rust


09.方法和函数

<h1>09.方法和函数</h1> <h2>1、方法定义</h2> <pre><code>#[derive(Debug)] struct Rectangle { width: u32, height: u32, } impl Rectangle { fn area(&amp;amp;self) -&amp;gt; u32 { self.width * self.height } } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( &amp;quot;The area of the rectangle is {} square pixels.&amp;quot;, rect1.area() ); } self、&amp;amp;self 和 &amp;amp;mut self ------------------------ 需要注意的是,self 依然有所有权的概念: self 表示 Rectangle 的所有权转移到该方法中,这种形式用的较少 &amp;amp;self 表示该方法对 Rectangle 的不可变借用 &amp;amp;mut self 表示可变借用</code></pre> <h2>2、多个参数</h2> <pre><code>struct Rectangle { width: u32, pub height: u32, } impl Rectangle { fn area(&amp;amp;self) -&amp;gt; u32 { self.width * self.height } fn can_hold(&amp;amp;self, other: &amp;amp;Rectangle) -&amp;gt; bool { self.width &amp;gt; other.width &amp;amp;&amp;amp; self.height &amp;gt; other.height } } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; let rect2 = Rectangle { width: 10, height: 40 }; println!(&amp;quot;Can rect1 hold rect2? {}&amp;quot;, rect1.can_hold(&amp;amp;rect2)); }</code></pre> <h2>3、函数和方法</h2> <p>函数:类方法:不带self参数 方法:对象方法:带self参数</p> <pre><code>impl Rectangle { // 函数:类方法:不带self参数 fn new(w: u32, h: u32) -&amp;gt; Rectangle { Rectangle { width: w, height: h } } // 方法:对象方法:带self参数 fn area(&amp;amp;self) -&amp;gt; u32 { self.width * self.height } fn can_hold(&amp;amp;self, other: &amp;amp;Rectangle) -&amp;gt; bool { self.width &amp;gt; other.width &amp;amp;&amp;amp; self.height &amp;gt; other.height } }</code></pre> <h2>4、常量函数const fn</h2> <p>在编译时提前计算</p> <pre><code>const fn add(a: usize, b: usize) -&amp;gt; usize { a + b } const RESULT: usize = add(5, 10); fn main() { println!(&amp;quot;The result is: {}&amp;quot;, RESULT); }</code></pre>

页面列表

ITEM_HTML