Structs
Defining a Struct
Fields and methods live together inside the struct body:
wyn
struct Point {
x: int
y: int
fn distance(self, other: Point) -> float {
var dx = (other.x - self.x) * (other.x - self.x)
var dy = (other.y - self.y) * (other.y - self.y)
return Math.sqrt(dx + dy)
}
fn to_string(self) -> string {
return "(${self.x}, ${self.y})"
}
}Creating Instances
wyn
var p1 = Point{x: 0, y: 0}
var p2 = Point{x: 3, y: 4}Accessing Fields
wyn
println(p1.x.to_string()) // 0Calling Methods
Methods use self to access the instance:
wyn
println(p1.to_string()) // (0, 0)
println(p1.distance(p2).to_string()) // 5.0Structs in Arrays
wyn
var points = [Point{x: 1, y: 2}, Point{x: 3, y: 4}]
println(points[0].to_string())Larger Example
wyn
struct User {
name: string
age: int
fn greeting(self) -> string {
return "Hi, ${self.name}!"
}
fn is_adult(self) -> bool {
return self.age >= 18
}
}
fn main() -> int {
var users = [User{name: "Alice", age: 25}, User{name: "Bob", age: 17}]
for u in users {
println("${u.greeting()} adult=${u.is_adult()}")
}
return 0
}Try It
Press Run or Ctrl+Enter