我想知道,&&
,and
,||
,or
基本核心不可更改的功能(如其他语言,例如:php),或者它们是对象方法,如&
<=>
但定义了一些神奇的方式
关于我的思路特征的更多细节:
[] & [10]
# => []
[].&([10])
# => []
"aaa".& 10
# NoMethodError: undefined method `&' for "aaa":String
请注意未定义的方法
......当然可以。
true.& false
# => false
...但你不能这样做:
true.&& false
# SyntaxError:
所以如果有可能的话
class String
# monkey patch. If you googled this don't use this in real world, use ruby mixins insted
def &(right_side)
# do something meaningfull
right_side
end
end
"aaa".& 10
# => 10 # ta-da!
是否(有一些魔力)可以做到:
class String
# monkey patch. If you googled this don't use this in real world, use ruby mixins insted
def &&(right side)
# do something meaningfull
right side
end
end
# => SyntaxError: (irb):13: syntax error, unexpected keyword_end
THX
答案 0 :(得分:3)
这些是无法(重新)定义的运算符:
其他人,如(不完整列表)!,〜,+, - ,**,*,/,%,&gt;&gt;,==,!=作为方法实现,可以重新定义。
答案 1 :(得分:2)
David A. Black 在他的书中说:
[T]他是条件赋值运算符
||=
,以及它很少被发现 cousin&amp;&amp; =,两者都提供与伪操作符方法相同的快捷方式,但基于运算符,即||
和&&
,您无法覆盖。
现在请了解原因请查看并阅读Why can't we override
||and
&&?
和Operator Overloading
。