jorts/examples/struct-functions.jt

61 lines
935 B
Text
Raw Normal View History

import io
struct A {
int val1,
int val2
}
// self is injected and represents the struct A
// from the functions' definition
fn A:sum_fields() -> int {
self.val1 + self.val2
}
// type of sum_fields is:
// Func ([A] -> int)
// the mut keyword signals that self is a "reference"
// to self, instead of a copy
// however, what actually happens is that an instance of
// A is returned from the function implicitly
fn mut A:incr_both_fields() {
self.val1++
self.val2++
}
// and so, the type becomes:
// Func ([A] -> A)
fn mut A:incr_and_sum () {
self.val1++
self.val2++
self.val1 + self.val2
}
// type is:
// Func ([A] -> (A, int))
fn main () {
a := A{0, 0}
a.incr_both_fields()
/*
translates to:
a := incr_both_fields(a)
*/
sum := a.sum_fields()
io.puts(sum)
val = a.incr_and_sum()
/*
translates to:
a, val := incr_and_sum(a)
*/
}