Недавно я наткнулся на конструкцию Ruby EOB
/ -EOB
в этом контексте (из библиотеки Ruby id3 ):
def initialize(...)
# ...
instance_eval <<-EOB
class << self
def parse
# ...
# Method code
# ...
end
EOB
self.parse # now we're using the just defined parsing routine
# ...
end
Я понимаю, что код используется для генерации метода на лету, но я хотел бы знать, можно ли использовать фрагмент EOB
внутри метода. Я хотел бы написать метод, который генерирует некоторый другой код метода, который должен быть включен в еще один класс. Это звучит немного запутанно, я попытаюсь проиллюстрировать свое намерение с помощью нескольких упрощенных примеров кода:
# This class reads the code of another
# Ruby class and injects some methods
class ReadAndInject
# The method which defines another method
def get_code_to_be_injected
"\tdef self.foo\n"+
"\t\tputs 'bar'\n"+
"\tend\n"
end
# Main entry point, reads a generated Ruby Class
# and injects specific methods within it
def read_and_inject
# Assume placeholder for currently read line,
# add the generated code within
current_line += "\n#{get_code_to_be_injected}"
end
end # class ReadAndInject
Это будет работать, так как вводимый метод добавлен правильно. Однако мне было интересно, даст ли использование конструкции EOB
некоторые преимущества (например, лучшую видимость кода, поскольку не нужно добавлять никаких громоздких вкладок или конкатенаций строк.
В заключение, это хороший вариант использования для EOB
?
Это похоже на теневую, но мощную конструкцию, я приглушил , googled и stackoverflow'd, но при этом не было возвращено никаких существенных примеров кода, кроме из RubyCocoa . Я только недавно начал использовать мета-конструкции в Ruby, поэтому будьте осторожны: -)
Заранее спасибо!