#!/usr/bin/ruby
class Example {
method foo { }
method bar(arg) { "bar(#{arg})" }
}
var obj = Example()
var methods = obj.methods
assert(methods.contain(:foo))
assert(methods.contain(:bar))
var meth = methods.item(:bar) # `meth` stores a LazyMethod object
assert_eq(meth.call(123), 'bar(123)') # calls the Example.bar() method
var meth = ((methods){:bar})
# Call the `bar` method
assert_eq(meth(42), "bar(42)")
# Redefine the `bar` method
Example.def_method(:bar,
func(self) { "redefined" }
)
# Call the redefined `bar` method
assert_eq(meth(), 'redefined')
say "** Test passed!"