129 lines
2.5 KiB
Plaintext
129 lines
2.5 KiB
Plaintext
class Person {
|
|
def initialize: @name age: @age {
|
|
"""
|
|
This is a docstring for the Person constructor method.
|
|
Docstrings usually are multi-line, like this one.
|
|
"""
|
|
}
|
|
|
|
def to_s {
|
|
# return is optional in this case, but we use it nontheless
|
|
return "Person with name: #{@name inspect} and age: #{@age}"
|
|
}
|
|
}
|
|
|
|
class PersonWithCity : Person {
|
|
def initialize: @name age: @age city: @city {
|
|
}
|
|
|
|
def to_s {
|
|
super to_s ++ " living in: #{@city inspect}"
|
|
}
|
|
}
|
|
|
|
p1 = Person new: "Johnny Jackson" age: 42
|
|
p1 println # prints: Person with name: "Johnny Jackson" and age: 42
|
|
|
|
p2 = PersonWithCity new: "John Appleseed" age: 55 city: "New York"
|
|
p2 println # prints: Person with name: "John Appleseed" age: 55 living in: "New York"
|
|
|
|
array = [1,2,3, "foo", 'bar]
|
|
hash = <['foo => "bar", 'bar => 42]>
|
|
tuple = (1,2,"hello","world")
|
|
block = |x, y| {
|
|
x + y println
|
|
}
|
|
block call: [4,2]
|
|
|
|
0b010101 & 0b00101 to_s: 2 . println
|
|
0xFF & 0xAB to_s: 16 . println
|
|
0o77 > 0o76 println
|
|
123.123 + 0.222 println
|
|
|
|
x = 0
|
|
try {
|
|
10 / x println
|
|
} catch ZeroDivisionError => e {
|
|
x = 3
|
|
retry
|
|
} finally {
|
|
"Finally, done!" println
|
|
}
|
|
|
|
def a_method: arg1 with_default_arg: arg2 (42) {
|
|
arg1 * arg2 println
|
|
}
|
|
|
|
a_method: 42
|
|
a_method: 42 with_default_arg: 85
|
|
|
|
class ClassWithClassMethod {
|
|
def self class_method1 {
|
|
'works
|
|
}
|
|
|
|
def ClassWithClassMethod class_method2 {
|
|
'this_as_well
|
|
}
|
|
}
|
|
|
|
ClassWithClassMethod class_method1 println
|
|
ClassWithClassMethod class_method2 println
|
|
|
|
def another_method: block {
|
|
1 upto: 10 . map: block
|
|
}
|
|
|
|
# local returns
|
|
another_method: |x| { return_local x * 2 } . inspect println
|
|
|
|
|
|
# pattern matching:
|
|
class PatternMatching {
|
|
def match_it: obj {
|
|
match obj {
|
|
case String -> "It's a String!" println
|
|
case Fixnum -> "It's a Number!" println
|
|
case _ -> "Aything else!" println
|
|
}
|
|
}
|
|
|
|
def match_with_extract: str {
|
|
match str {
|
|
# m holds the MatchData object, m1 & m2 the first and second matches
|
|
case /^(.*) : (.*)$/ -> |m, m1, m2|
|
|
"First match: #{m1}" println
|
|
"Second match: #{m2}" println
|
|
}
|
|
}
|
|
}
|
|
|
|
pm = PatternMatching new
|
|
pm match_it: "foo"
|
|
pm match_it: 42
|
|
pm match_it: 'foo
|
|
|
|
pm match_with_extract: "Hello : World!"
|
|
|
|
|
|
# calling ruby methods:
|
|
[3, 2, 1] reverse() each() |a| { puts(a) }
|
|
"Hello" sub("ll", "y") println
|
|
[3, 2, 1] map() |a| { a * 2 } inject(0) |s i| { s + i } println
|
|
|
|
# test symbol highlighting
|
|
['foo]
|
|
['foo?!]
|
|
{'foo}
|
|
{'foo!?}
|
|
{'foo:bar?!=&/:}
|
|
('foo)
|
|
|
|
# future sends
|
|
42 @ to_s class println
|
|
42 @ to_s: 16 . value println
|
|
|
|
# async sends
|
|
42 @@ println
|
|
42 @@ upto: 100
|