More Structs
This commit is contained in:
parent
b9430effb8
commit
ca199c667b
@ -1,5 +1,5 @@
|
||||
:experimental:
|
||||
:docdatetime: 2022-07-05T17:31:22+02:00
|
||||
:docdatetime: 2022-07-05T17:45:24+02:00
|
||||
|
||||
= Structs
|
||||
|
||||
@ -117,7 +117,7 @@ Man kann sogar ein Statement da rein packen (also zum Beispiel `30 * x`) und bek
|
||||
Unser Struct soll jetzt auch eine Funktion auf sich selbst aufrufen können.
|
||||
Tatsächlich ist der sehr einfach und sehr OOPig.
|
||||
|
||||
Die folgenden Beispiele sollten relativ viel erklären.
|
||||
Die folgenden Beispiele sollten relativ viel erklären:
|
||||
|
||||
[source, Rust]
|
||||
----
|
||||
@ -127,11 +127,15 @@ struct Rectangle {
|
||||
}
|
||||
|
||||
impl Rectangle {
|
||||
// Das ist eine Methode/"method"
|
||||
// Erster Parameter ist &self (/&mut self) und wird aufgerufen wie folgt:
|
||||
// var.area();
|
||||
fn area(&self) -> u32 {
|
||||
self.width * self.height
|
||||
}
|
||||
|
||||
// Das ist eine "associated function"
|
||||
// Kein &self und aufgerufen wie folgt:
|
||||
// Rectangle::square(5);
|
||||
fn square(size: u32) -> Rectangle {
|
||||
Rectangle {
|
||||
@ -152,6 +156,11 @@ impl Rectangle {
|
||||
fn same_area(first: &Rectangle, second: &Rectangle) -> bool {
|
||||
first.area() == second.area()
|
||||
}
|
||||
|
||||
// Methoden können auch wie Felder heißen
|
||||
fn width(&self) -> bool {
|
||||
self.width > 0
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
@ -169,3 +178,33 @@ fn main() {
|
||||
println!("{}", Rectangle::same_area(&rect1, &rect2)); // true
|
||||
}
|
||||
----
|
||||
|
||||
=== `&mut self`
|
||||
|
||||
Eine Methode kann auch `&mut self` als ersten Parameter haben.
|
||||
Dann können auch Felder geschrieben werden. In diesem Fall werden Referenzen aber invalidiert!
|
||||
|
||||
[source, Rust]
|
||||
----
|
||||
struct Rectangle {
|
||||
width: u32,
|
||||
height: u32,
|
||||
}
|
||||
|
||||
impl Rectangle {
|
||||
fn change_width(&mut self, width: u32) {
|
||||
self.width = width;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut rect1 = Rectangle {
|
||||
width: 12,
|
||||
height: 3,
|
||||
};
|
||||
let ref1 = &rect1;
|
||||
rect1.change_width(5);
|
||||
|
||||
println!("{}", ref1.width); // <- geht nicht!
|
||||
}
|
||||
----
|
||||
|
Loading…
Reference in New Issue
Block a user