Hana 9e216da9ef go.mod: add go.mod and move pygments to third_party
After go1.16, go will use module mode by default,
even when the repository is checked out under GOPATH
or in a one-off directory. Add go.mod, go.sum to keep
this repo buildable without opting out of the module
mode.

> go mod init github.com/mmcgrana/gobyexample
> go mod tidy
> go mod vendor

In module mode, the 'vendor' directory is special
and its contents will be actively maintained by the
go command. pygments aren't the dependency the go will
know about, so it will delete the contents from vendor
directory. Move it to `third_party` directory now.

And, vendor the blackfriday package.

Note: the tutorial contents are not affected by the
change in go1.16 because all the examples in this
tutorial ask users to run the go command with the
explicit list of files to be compiled (e.g.
`go run hello-world.go` or `go build command-line-arguments.go`).
When the source list is provided, the go command does
not have to compute the build list and whether it's
running in GOPATH mode or module mode becomes irrelevant.
2021-02-15 16:45:26 -05: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