mers/site/welcome.mers

52 lines
1.3 KiB
Plaintext
Raw Normal View History

2023-05-04 05:42:45 +02:00
fn get_number_input(question string) {
println(question)
input := read_line()
2023-05-04 05:42:45 +02:00
// try to parse to an int, then a float.
2023-05-26 20:18:09 +02:00
in := match {
input.parse_int() n n
input.parse_float() n n
2023-05-04 05:42:45 +02:00
}
// 'in' has type int/float/[] because of the match statement
switch! in {
2023-05-26 20:18:09 +02:00
int/float in in
2023-05-04 05:42:45 +02:00
// replace [] with an appropriate error before returning
2023-05-26 20:18:09 +02:00
[] [] Err: "input was not a number."
2023-05-04 05:42:45 +02:00
}
// return type is int/float/Err(string)
}
answer := get_number_input("What is your favorite number?")
2023-05-04 05:42:45 +02:00
2023-05-18 02:12:21 +02:00
answer.debug() // type: int/float/Err(string)
2023-05-04 05:42:45 +02:00
// switch can be used to branch based on a variables type.
// switch! indicates that every possible type must be handled.
switch! answer {
2023-05-26 20:18:09 +02:00
int num {
2023-05-04 05:42:45 +02:00
println("Entered an integer")
2023-05-26 20:18:09 +02:00
num.debug() // type: int
2023-05-04 05:42:45 +02:00
}
2023-05-26 20:18:09 +02:00
float num {
2023-05-04 05:42:45 +02:00
println("Entered a decimal number")
2023-05-26 20:18:09 +02:00
num.debug() // type: float
2023-05-04 05:42:45 +02:00
}
2023-05-26 20:18:09 +02:00
Err(string) [] println("Input was not a number!")
2023-05-04 05:42:45 +02:00
}
2023-05-18 02:12:21 +02:00
// wait one second
sleep(1)
2023-05-04 05:42:45 +02:00
// function that returns an anonymous function (function object).
// anonymous functions can be used as iterators in for-loops.
2023-05-18 02:12:21 +02:00
fn square_numbers() {
i := 0
2023-05-04 05:42:45 +02:00
() {
&i = i + 1
2023-05-18 02:12:21 +02:00
i * i
2023-05-04 05:42:45 +02:00
}
}
2023-05-18 02:12:21 +02:00
for num square_numbers() {
2023-05-04 05:42:45 +02:00
println(num.to_string())
2023-05-18 02:12:21 +02:00
// once num is greater than 60, the loop stops.
num.gt(50)
}