При использовании вызова Proc # для вызова лямбда-функции в Ruby self
всегда заканчивается значением, которое имело при определении функции, а не значением, которое она имеет при вызове функции, например:
$p = lambda { self }
class Dummy
def test
$p.call
end
end
d = Dummy.new
> d.test
=> main
Вызов test
возвращает main
, когда я намеревался вернуть это #<Dummy:0xf794>
- экземпляр Dummy
, который был значением self
в точке кода, где я звонил $p
.
В Javascript я просто передал бы объект, которому я хочу быть «вызываемым», в качестве первого аргумента call
. Есть ли такая функциональность в Ruby, позволяющая мне устанавливать произвольный объект или, по крайней мере, текущее значение self
в качестве нового значения для self
, когда я вызываю Proc
?