methods/top_level_self_and_calls.rb

tests/_examples/methods/top_level_self_and_calls.rb in the metorex repository.

# A method written at the top level runs with `main` as `self`, however it
# is called, and a call written with parentheses reaches the method even
# where a local of the same name exists.
def whoami
  self
end

p(whoami)
p(whoami())
p(method(:whoami).call)
p(method(:whoami).receiver)

class Caller
  def ask = whoami
end
p(Caller.new.ask.class)

def label = :method
label = "local"
p(label)
p(label())

count = 3
begin
  count()
rescue NoMethodError => error
  puts(error.message)
end

format = 5
p(format("%03d", 7))
p(format)

Output:

main
main
main
main
Caller
"local"
:method
undefined method 'count' for main
"007"
5