Mark McGranaghan 8d31ec147c move to vendor
2012-11-17 08:21:42 -08:00

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