Tag:

覆盖Ruby中的实例变量数组的运算符

抱歉这个糟糕的头衔,我真的不知道怎么称呼它。 我在Ruby中有这样的东西: class Test def initialize @my_array = [] end attr_accessor :my_array end test = Test.new test.my_array << "Hello, World!" 对于@my_array实例变量,我想覆盖<<运算符,以便我可以先处理插入到它的任何内容。 我已经尝试过@my_array.<<(value)作为类中的一个方法,但它没有用。

ruby运算符重载问题

为了娱乐目的,我一直在使用ruby和opengl,我决定写一些3d矢量/平面/等级类来完成一些数学运算。 简化示例: class Vec3 attr_accessor :x,:y,:z def *(a) if a.is_a?(Numeric) #multiply by scalar return Vec3.new(@x*a, @y*a, @z*a) elsif a.is_a?(Vec3) #dot product return @x*ax + @y*ay + @z*az end end end v1 = Vec3.new(1,1,1) v2 = v1*5 #produces [5,5,5] 这一切都很好,花花公子,但我也想写 v2 = 5*v1 这需要为Fixnum或Float或其他任何东西添加function,但我找不到重载或扩展fixnum的乘法而不完全替换它的方法。 ruby有可能吗? 有小费吗? (显然,如果我需要的话,我可以按正确的顺序写下我的所有乘法)

一元运算符的行为

在Fixnum类中重新定义Ruby中的一元+运算符时有一些奇怪的结果。 不完全确定事情发生的原因(特别是第009行)。 irb:003> class Fixnum irb:004> def +@ #define unary + irb:005> 15 irb:006> end irb:007> end => nil irb:008> 2 => 2 irb:009> +2 => 2 irb:010> +(2) => 15 irb:011> ++2 => 15

为什么Ruby只允许某些运算符重载

在Ruby中,与许多其他OO编程语言一样,运算符是可重载的。 但是,只有某些字符运算符可以重载。 此列表可能不完整,但是,以下是一些无法重载的运算符: !, not, &&, and, ||, or

可以覆盖/实现的ruby运算符列表

是否有可以覆盖的所有ruby运算符的列表? (不是那些不能!)