Skip to content

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())      // 0

Calling Methods

Methods use self to access the instance:

wyn
println(p1.to_string())            // (0, 0)
println(p1.distance(p2).to_string()) // 5.0

Structs 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

🐉 Playground
Press Run or Ctrl+Enter

MIT License