我理解 x == y
在 Ruby 中解释为 a.==(y)
。我尝试检查是否可以使用自定义方法 foo
实现相同的效果,如下所示:
class Object
def foo(n)
self == n
end
end
class A
attr_accessor :x
end
a = A.new
a.x = 4
puts a.x.==(4) # => true
puts a.x.foo(4) # => true
puts a.x == 4 # => true
puts a.x foo 4 # => in `x': wrong number of arguments (1 for 0) (ArgumentError)
不幸的是,这不起作用。我错过了什么? ==
是 Ruby 中的一个特殊方法吗?
最佳答案
不,==
不是Ruby 中的特殊方法。这是一种与其他方法一样的方法。您看到的只是一个解析问题:
a.x foo 4
与
相同a.x(foo(4))
IOW,您正在将 foo(4)
作为参数传递给 x
,但 x
不接受任何参数。
但是,有特殊的操作符语法,它允许你写
a == b
代替
a.== b
对于有限的运算符列表:
==
!=
<
>
<=
>=
<=>
===
&
|
*
/
+
-
%
**
>>
<<
!==
=~
!~
此外,还有一种特殊的语法可以让你这样写
!a
和
~a
代替
a.!
和
a.~
还有
+a
和
-a
代替
a.+@
和
a.-@
然后,有
a[b]
和
a[b] = c
代替
a.[] b
和
a.[]= b, c
最后但并非最不重要的
a.(b)
代替
a.call b
关于ruby - == 是 Ruby 中的一个特殊方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6634179/