Ваш метод scope
в основном бесполезен. Когда вы передаете блок методу, который дает результат, блок оценивается в текущей области видимости. Наблюдать:
class A
def self.scope
yield
end
end
A.scope { p self }
# main
Поскольку блоку ничего не передается, и ничего не делается с возвращаемым значением yield
, любой код, выполняемый в блоке, будет иметь тот же эффект, что и за пределами блока scope
.
Однако это не относится к instance_eval
. Когда instance_eval
запускает блок, self
в блоке устанавливается на получателя (а не то, что self
находится в области действия блока). Как это:
class A
end
A.instance_eval { p self }
# A
Но обратите внимание, что это означает, что self.instance_eval { ... }
также является причудливым отсутствием операций, потому что вы меняете self
блока на тот же self
вне блока.
Итак, ваш код эквивалентен этому:
class A
def self.method_added method
# do something involving the added method
end
end
class B < A
def foo
end
end
person
Max
schedule
29.01.2015