2011-01-30 4 views
4

は私がvalue_at_location=(x,y,value)Ruby:このような割り当てを行う方法はありますか?self.value_at_location(x、y)= value?

ような方法を定義することによって、

self.value_at_location=(x,y,value) 

を行うことができます知っているが、読みやすくするために、私はvalue_at_location(x,y)=(value)が可能であったならば、それは素晴らしいだろうと思います。またはそれのようなものです。

提案がありますか?

+1

'def x =(y、z)'を定義すると、決して 'foo.x = 17,42'と呼ばれることはありません(2の場合は1引数になります)。 'foo.send(:x =、17、42)'とすることができます。しかしこれで、@ sepp2kが示唆していることを行うこともできます。 – Phrogz

答えて

4

いいえ、foo(x,y) = valueのセッターメソッドを定義することはできません。

しかし、[]=(x,y,value)を定義してself[x,y] = valueと呼ぶことができます。

0

なぜこれをやりたいですか?それは、私はこれをテストしていません

class Point 
    ... 
    def location_at_value(x, y) 
      x = Object.new 
      x.define_method(:=) { |value| @value[x, y] = value } 
      return x 
    end 
end 

注意、しかし:

class Point 
    attr_reader :x, :y, :value 
    attr_accessor :value 
    def initialize 
    @value = [@x,@y] 
    end 

    def value_at x y 
    @x = x 
    @y = y 
    end 

end 
1

一つは、仮に、metaprogramingでいくつかの奇妙なものを行うことができます:これを行うには非常に簡単ではないでしょう理論的にはうまくいくはずです。これは動作しません。以下のコメントを参照してください。

+0

a) '='は有効なメソッド名ではないため、b)代入を再定義することはできないので、 '='というメソッドを定義することができても、 'send'これはOPを助けません。 – sepp2k

関連する問題