Rubyのevalの利用例
割とRubyだと動的にメソッドを定義することで、evalを利用することがあります。
gem Faradayでは、structクラスと併用することで使われています。
ただし、evalを利用する事は、非常に可読性が落ちたりや、デバックがしにくくなることから、とにかく
批判を受けがちです。
内部のロジックが同様なメソッドをメソッド名とパラメータ名だけ変えたい場合に使います。
eval
evalの引数には、文字列が渡せるので、"",''だけではなく、ヒアドキュメントを渡す実装も見受けられます。 gem faradayのコード
eval
# 動かないです。 eval <<-"EOS" def new_methods %w(office category).each do |name| eval<<"EOS" def area_in_#{name}(ksjcd="") conn.get '&ksjcd=#{ksjcd}' end EOS end end EOS
動的にメソッドを生成したい場合で、メソッド名や、パラメータが変わるだけなら、重複するコードは避けて この方がすっきりしますよね。instace_eval, class_eval, evalの違いについては、また次回、記事したいと思います。
evalの記述自体は、否定的な意見を多くきくのですが、gemなどのコードでは多用されているので、業務レベルで多用されていないということでしょうかね。 あくまでも、私の周りにかぎりますが。
以上です。