Я углубляюсь в метапрограммирование ruby и задаю следующий вопрос. Пример:ruby method_alias в унаследованном классе
module ExampleAliaser
def do_example_alias(prefix=:origin)
class_eval <<-EOS
class << self
alias_method :#{prefix}_example, :example
def example
puts "in aliase will call :#{prefix}_example"
#{prefix}_example
end
end
EOS
end
end
class Example1
def self.example
puts "Example"
end
end
Example1.extend(ExampleAliaser)
class Example1
do_example_alias(:origin)
end
class Example2 < Example1
do_example_alias(:origin)
end
Example1.example
in aliase will call :origin_example
Example
=> nil
Example2.example
in aliase will call :origin_example
in aliase will call :origin_example
in aliase will call :origin_example
SystemStackError: stack level too deep
from /Users/igorfedoronchuk/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/irb/workspace.rb:80
Maybe IRB bug!!
Таким образом, когда используется Mixin 2 раза это вызывает ошибку. Каков наилучший способ исправить такие вещи? Как определить, что перемешивание существует и удалить его перед новым смешиванием
исправить то, что именно? – psyho
уровень стека слишком глубокий, прокрутите вниз блок источника – Fivell
doh, не заметили полосу прокрутки: | – psyho