いいえ、<operator>=
Ruby では再定義できません。
実際の値にデリゲートするクラスに戻り値をラップして、非常に凝ってみることができます。このように、それらは実際の値のように動作しますが、たとえば+
.
簡単な例を次に示します。
require 'delegate'
module Redis
class Set
class Value < SimpleDelegator
def +(val)
Increment.new(self, val)
end
end
class Increment < SimpleDelegator
attr_reader :increment
def initialize(source, increment)
super(source.__getobj__ + increment)
@increment = increment
end
end
def [](key)
Value.new(@redis.not_sure_what(@name, key))
end
def []=(key,val)
if val.is_a?(Increment)
@redis.zincrby(@name,val.increment,key)
else
@redis.zadd(@name,val,key)
end
end
end
end
これは単なる出発点です。たとえば、キーが同じであることを確認するなど、これよりも注意する必要があります。私の単純な例では、実際には...redis[:foo] = redis[:bar] + 1
と同等ですredis[:foo] += 1