Rust methods: Difference between revisions

From wikinotes
Line 5: Line 5:
}}
}}


= Basics =
= Associated Functions =
<blockquote>
<blockquote>
Rust lets you add methods to structs using <code>impl</code>.
Rust lets you add methods to structs using <code>impl</code>.
* <code>self</code> is a reference to the instance
* <code>Self</code> is a reference to the object-type
* <code>impl</code> allows you to associate functions to an object
* you can have as many <code>impl</code> blocks as you'd like


<syntaxhighlight lang="rust">
<syntaxhighlight lang="rust">
Line 17: Line 21:


impl RgbColor {
impl RgbColor {
    fn red() -> Self {
        Self {
            r: 255,
            g: 0,
            b: 0,
        }
    }
     fn brighten(&self) {
     fn brighten(&self) {
         self.r += 8;
         self.r += 8;
         self.g += 8;
         self.g += 8;
         self.b += 8;
         self.b += 8;
    }
    fn darken(&self) {
        self.r -= 8;
        self.b -= 8;
        self.g -= 8;
     }
     }
}
}


// methods
let c = RgbColor{r: 8, g: 8, b: 8};
let c = RgbColor{r: 8, g: 8, b: 8};
c.brighen();  // {r: 16, g: 16, b: 16}
c.brighen();  // {r: 16, g: 16, b: 16}
// class methods
red = RgbColor::red()
</syntaxhighlight>
</syntaxhighlight>



Revision as of 19:57, 7 February 2023

Rust lets you add methods to structs.

TODO:

other types? what's the full spectrum here?

Associated Functions

Rust lets you add methods to structs using impl.

  • self is a reference to the instance
  • Self is a reference to the object-type
  • impl allows you to associate functions to an object
  • you can have as many impl blocks as you'd like
type RgbColor{
    r: u8,
    g: u8,
    b: u8,
}

impl RgbColor {
    fn red() -> Self {
        Self {
            r: 255,
            g: 0,
            b: 0,
        }
    }

    fn brighten(&self) {
        self.r += 8;
        self.g += 8;
        self.b += 8;
    }
}

// methods
let c = RgbColor{r: 8, g: 8, b: 8};
c.brighen();  // {r: 16, g: 16, b: 16}

// class methods
red = RgbColor::red()

Similar to go, you can use the . operator to access methods on either a reference or an instance.
rust will automatically dereference it for you.