здесь и далее - мой фрагмент кода, который я хочу упростить, чтобы избежать передачи дополнительного аргумента при каждом вызове. Фактически, мой сценарий использования состоит в том, что M
- это пользовательская библиотека без определения аргумента context
для каждого метода. check
- это метод, который не определен пользователем.
# User code
module M
def do_something(context)
puts "Called from #{context}"
context.check
end
module_function :do_something
end
# Application code
class Bar
def check
puts "Checking from #{self}..."
end
end
class Foo < Bar
def do_stuff(scope, method)
scope.send method, self
end
end
# Executed by user
Foo.new.do_stuff M, :do_something
Есть ли способ сделать то же самое, не передавая self
в качестве входного аргумента методу do_something
, чтобы получить метод check
?
# User code
module M
def do_something
called_from_object = ???
puts "Called from #{called_from_object}"
called_from_object.check
end
module_function :do_something
end
# Application code
class Bar
def check
puts "Checking from #{self}..."
end
end
class Foo < Bar
def do_stuff(scope, method)
scope.send methood
end
end
# Executed by user
Foo.new.do_stuff M, :do_something
Спасибо за вашу поддержку!