Mis*_*hko 6 ruby methods equality
我理解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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.我错过了什么?是==在Ruby中一种特殊的方法?
Jör*_*tag 15
不,==不是Ruby中的特殊方法.这是一种与其他方法一样的方法.你所看到的只是一个解析问题:
a.x foo 4
Run Code Online (Sandbox Code Playgroud)
是相同的
a.x(foo(4))
Run Code Online (Sandbox Code Playgroud)
IOW,你foo(4)作为一个参数传递x,但x不接受任何争论.
还有就是然而,特殊的运算符语法,它允许你写
a == b
Run Code Online (Sandbox Code Playgroud)
代替
a.== b
Run Code Online (Sandbox Code Playgroud)
对于有限的运营商名单:
==
!=
<
>
<=
>=
<=>
===
&
|
*
/
+
-
%
**
>>
<<
!==
=~
!~
Run Code Online (Sandbox Code Playgroud)
此外,还有一些特殊的语法允许您编写
!a
Run Code Online (Sandbox Code Playgroud)
和
~a
Run Code Online (Sandbox Code Playgroud)
代替
a.!
Run Code Online (Sandbox Code Playgroud)
和
a.~
Run Code Online (Sandbox Code Playgroud)
以及
+a
Run Code Online (Sandbox Code Playgroud)
和
-a
Run Code Online (Sandbox Code Playgroud)
代替
a.+@
Run Code Online (Sandbox Code Playgroud)
和
a.-@
Run Code Online (Sandbox Code Playgroud)
然后,有
a[b]
Run Code Online (Sandbox Code Playgroud)
和
a[b] = c
Run Code Online (Sandbox Code Playgroud)
代替
a.[] b
Run Code Online (Sandbox Code Playgroud)
和
a.[]= b, c
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要
a.(b)
Run Code Online (Sandbox Code Playgroud)
代替
a.call b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |