Mutability
In Dyon, when a function changes an argument, you need to add mut
:
fn foo(mut x) { x = 3 } fn main() { a := 2 foo(mut a) println(a) // prints `3` }
A function that calls a function that changes an argument, also need mut
:
fn foo(mut x) { x = 3 } // Requires `mut x` because it calls `foo`. fn bar(mut x) { foo(mut x) } fn main() { a := 2 bar(mut a) println(a) // prints `3` }
This helps programmers understand the code.
Mutability information is part of the function name. You can declare multiple functions with different mutability patterns:
// `name` name(person: {}) = clone(person.name) // `name(mut,_)` fn name(mut person, name) { person.name = clone(name) } fn main() { character := {name: "Homer Simpson"} println(name(character)) // prints `Homer Simpson` name(mut character, "Marge Simpson") println(name(character)) // prints `Marge Simpson` }