Я хочу использовать значение v
внутри методу экземпляра на метаклассе конкретного объекта:Как исправить это имя?
v = ParserMap[kind][:validation] # We want to use this value later.
s = ParserMap[kind][:specs]
const_set(name, lambda {
p = Parser.new(&s)
# This line starts a new scope...
class << p
define_method :validate do |opts|
v.call(self, opts) # => NameError! The `class` keyword above
# has started a new scope and we lost
# old `v`.
end
end
p
})
К сожалению, class
ключевого слова начинает новую область, так что я потерял старую область, и я получаю NameError , Как это исправить?
Если вы на 1.9.2, вы можете просто использовать 'define_singleton_method' вместо этого. –
@Jorg: Хороший момент!Я исправлю свой ответ. –