ごとけんです In message "[ruby-list:19953] メソッド名の制限?" on 99/12/28, "Hideaki Takata" <hideakit / d3.dion.ne.jp> writes: >たとえば、 > >Shikaku.set_x_from(0)to(200)_set_y_from(0)to(100) ># ShikakuをX座標で0から200、Y座標で0から100の長方形にする > >といった、書式ができたら便利かなと考えてるのですが、こういう書式を >容認すると、何か問題があるでしょうか? 今のRubyで出来ることには、 Shikaku.set(:x_from => 0, :x_to => 200, :y_from => 0, :y_to => 100) なんてのがあります。引数は一つのハッシュと解釈されます。 class Shikaku def set(arg) if arg.size == 1 && arg[0].is_a? Hash @x_from = arg[:x_from] || @x_from @x_to = arg[:x_to] || @x_to @y_from = arg[:y_from] || @y_from @y_to = arg[:y_to] || @y_to elsif arg.size < 5 set4(*arg) end return self end private def set4(x0 = @x_from, x1 = @x_to, y0 = @y_from, y1 = @y_to) @x_from, @x_to, @y_from, @y_to = [x0,x1,y0,y1].collect{|e| e.to_i} end end >それともう一つ、[]を使ったメソッド名について >def [] >とか >def []= >は、許されるのに >class Recipe > def zairyou[] ># do something > end > def zairyou[]= ># do something > end > def tejun[] ># do something > end > def tejun[]= ># do something > end >end >みたいなメソッドは許されないのは何かこういうメソッドが悪い理由があるの >でしょうか? 見ためを同じにするには、 class Recipe def initialize @zairyou = [] @tejun = [] end attr_reader :zairyou, :tejun end という手があります。この場合 Recipe#zairyou は配列 @zairyou を返すので、recipe.zairyou[0] = oniku とかが出来ます。もちろ ん配列である必要はないので、必要な機能を持ったオブジェクトで @zairyou と @tejun を初期化すれば良いわけです。 -- gotoken