ruby - == 是 Ruby 中的一个特殊方法吗?

标签 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)

不幸的是,这不起作用。我错过了什么? == 是 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/

相关文章:

java - 重复与现有

java - 在 Java 中使用翻转参数调用方法

c++ - std::istream 类型是 EqualityComparable 吗?

java - "and ' 和有什么区别?

objective-c - 如何在 Objective C 中实现 mixin 或 Trait 类型的行为?

c# - 如何从类中返回多个参数

ruby - 输入 Ruby 的货币验证

r - 当 != 时,`case_when()` 通过 NA

ruby-on-rails - 为邮件 rails 编写测试

html - 如何使用 GET 请求从 http ://moz. com 获取域权限?