Ruby重写操作符
Ruby重写操作符
可以重写+ - * / ~
等运算符,其实这些在Ruby中都是方法而不是操作符。
两个注意点:
相关说明参考:https://www.ruby-lang.org/en/documentation/faq/7/。
例如,定义一个点Point,并提供点的+ - * -@
方法:
1 | class Point |
上面没有做任何类型检测,因为Ruby在运算过程中出错时自己也会抛出类型错误。
但是,如果想要定义自己的错误以便知道错在何方而不是使用千篇一律的类型错误。那么也可以做类型检测。
以加法运算为例:
1 | def +(other) |
另外,上面的*
运算只支持p * 2
,不支持2 * p
,因为2 * p
是调用数值2的方法*
,但p此时不是数值。
1 | p 2 * p1 |
为了也支持2 * p
,Point显然要定义coerce()
,这里很简单,直接转换顺序即可,这样会重新执行p * 2
。
1 | def coerce(other) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 骏马金龙!
评论