class Vector < Array
def +(other)
case other
when Array
raise "Incorrect Dimensions" unless self.size == other.size
other = other.dup
self.class.new(map{|i| i + other.shift})
else
super
end
end
end
class Array
def to_vector
Vector.new(self)
end
end
[100,100].to_vector + [2,3] #=> [102,103]
6条答案
按热度按时间flvtvl501#
请参阅Vector类:
字符串
有关向量的其他操作,请参见vectorops:
.以下操作按预期工作
型
这就是vectorops。
请注意,matrix is no longer a default gem从Ruby 3.1.0开始。感谢Dan Murphy提到这一点。
kokeuurv2#
数组#zip:
字符串
较短:
型
使用#inject推广到>2维:
型
qcbq4gxm3#
或者,如果您想要该变量的任意维行为(如数学向量加法),
字符串
缺少lisp风格的Map是非常令人讨厌的。
qrjkbowd4#
当你在蒙得维的亚的时候。
字符串
然后你可以执行.vector_add(B),它就可以工作了。我相信这需要Ruby 1.8.7,或者添加Symbol.to_proc的扩展。你也可以用这种方式添加任意数量的向量。
lztngnrs5#
作为一个旁注,如果你(像我一样)对ruby中默认Vector类提供的操作不满意,可以考虑看看我的gem https://github.com/psorowka/vectorops,它增加了一些我期望从适当的Vector实现中获得的功能。
jobtbby36#
字符串
然后你可以创建一个Array子类,混合在模块中,或者将行为添加到特定的数组中,比如:
型