在 Ruby 中实现运算符重载 (+=)



如何为两个一维数组实现运算符重载(运算符 += (? 对于方法 def +@ 中的 b+=a ??? end

class Vector
def initialize
@vector = Array.new
end
def set_vector=(vector)
@vector = vector
end
def get_vector
@vector
end
def +@
?????
end  
end
a = Vector.new 
a.set_vector = [1,3,4,5]
print a.get_vector
b = Vector.new
b.set_vector = [1,2]
print b.get_vector
a.get_vector += b.get_vector
puts "n a new"
puts a

有一种更Ruby的方式来解决这个问题:

class Vector
attr_accessor :vector
def initialize(*values)
@vector = values
end
def [](i)
@vector[i]
end
def +(vector)
Vector.new(
*@vector.map.with_index do |v, i|
v + vector[i].to_i
end
)
end
end

请注意,+只是一个常规方法,这里不涉及+@方法,这是一元+,就像r = +v一样,但你想返回一个新对象,以便你可以链接它,就像在a + b + c中一样,并且永远不要修改原始对象。

+=创建一个新对象并执行分配,如x = x + 1.

在实践中:

v = Vector.new(1,2)
r = v + Vector.new(2,3)
# => #<Vector:0x00007fc6678955a0 @vector=[3, 5]>

最新更新