Если вы запустите код, указанный ниже, вы получите сообщение об ошибке.Как изменить контекст лямбда?
class C
def self.filter_clause param_1
puts param_1
yield # context of this param is class B
end
def hi
"hello"
end
end
class B
def self.filter(value, lambda)
code = lambda { filter_clause(value, &lambda) }
C.instance_exec(&code)
end
filter(:name, ->{ hi })
end
Ошибка
NameError: undefined local variable or method `hi' for B:Class
from (pry):17:in `block in <class:B>'
Из моего понимания причины для этого лямбда работает под контексте class B
. Поэтому он не может найти метод def hi
. Я не могу понять, как заставить его работать в контексте class C
.
По существу, я хочу, чтобы иметь возможность вводить метод, вызываемый в другом классе, который принимает аргумент и блок.
Например:
filter_clause("value", ->{ hi })
Возможно ли это?
Не уверен, если у меня есть смысл.
Где находится этот класс A? – steenslag
Извините, удалили ссылку на A. –