From: "Ohto, Yasunori" Date: 2007-11-15T15:44:02+09:00 Subject: [ruby-list:44223] スマートな記述ありますか? 大戸です。 みなさま、ご丁寧な返答、 ありがとうございます m_ _m #現在、Ruby/Tk でお絵かきしたいと奮闘してます... ^_^; 私は perl から越してきたこともあって(その前はC++ですが)、 下記の場合などにはruby ではどのように表現するとすっきり するでしょうか。 ------- perl ------- # 1.ローカルなスコープを持つ領域を手軽に作る my $a=10; { my $a=20; print "$a\n"; } print "$a\n" # 2.すでに定義されている関数を別の関数へ渡す sub hoge{ print "$_[0]\n"; } sub fuga{ my $f= shift @_; &$f(10); } fuga(\&hoge); ------- perl ------- スマートではないのですが、どうしてもという場合には 以下のように対応しています。 ------- ruby ------- # 1 a=10 lambda{ a=20; puts a }.call puts a # 2 def hoge(a) puts a end def fuga(a) a.call(10) end fuga( lambda{|a| hoge(a)} ) ------- ruby ------- Ruby では同じことを表現する場合でも、コード量が 少なくなる傾向があってうれしいです。 また、スマートな記述方法についてお聞きすることが あるかも知れません。 --- a.sort{|a,b| b<=>a } の件は、かなり複雑なコードの中で 発生していた現象でして、現象を突き止めるのにちょっと 苦労してしまいました。確かに、Rubyマニュアル(ピッケル)を 見ると書いてありました m_ _m すでに他の方法で解決している問題ですが、ハッシュと 再帰を用いたアルゴリズムでなかなか理解できない 振る舞いをされたことがあります。問題をシンプルにできれば、 ご報告したいと思います。 それでは、今後ともよろしくお願いいたします m_ _m