私は最近、このコンテキスト内でRuby EOB
/コンストラクトに出くわしました(Ruby id3ライブラリから):-EOB
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
ですか? 怪しげでありながら強力な構造のように見えます。私はそれをかわし、グーグルで検索し、 stackoverflowしましたが、RubyCocoa からのもの以外の重要なコード サンプルは返されませんでした。Ruby でメタ構造を使い始めたのはつい最近なので、お手柔らかにお願いします :-)
前もって感謝します!