[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002334] Re: method name



堀之内です. 

> ruby 教えて下さい. メソッド名をコマンドラインから指定して
> 処理させるようなこと, そもそも ruby でできるんでしょうか. 
> 
> 考えていることは, とある gphys data の log や abs をとりたいとき, 
> スクリプト中で 
> 
>  gphys = gphys.log10
> 
> 等とすればいいことはわかるのですが, この log10 の部分を
> 一般化して, たとえばコマンドラインからの引数として別のもの
> (たとえば abs とか)を指定してoperation をさせることはできるのか? 
> ということです. 

eval を使えば簡単にできます.

サンプル1:

method = "abs"
eval("gphys = gphys.#{method}")

サンプル2:

より ruby のコードらしく書こうと思うとヒアドキュメントを使うとい
いです.特に複数行にわたるコードの eval に便利.
# することは1と同じで,書き方が違うだけ

method = 'abs'
eval <<EOS
  gp2 = gphys.#{method}
EOS

サンプル3:

終了合図(ここではEOS)の前にスペースを入れる場合は << でなく,
<<- を使います:

  method = 'abs'
  eval <<-EOS
    gp2 = gphys.#{method}
  EOS

恐らくサンプル3方式が一番見やすく書けるでしょう.