Ruby中的运算符只属于一个特定的类吗?

时间:2012-09-18 07:11:15

标签: ruby

Ruby中的运算符属于特定类吗?根据我的知识,运算符是由类根据它们要执行的操作重新定义的标记。例如,Numeric类为数值运算定义+运算符,类似地,String类为字符串连接定义它。基于此,如果我尝试这样做:

    +.is_a ? (Numeric)

返回false。我对这个问题的解释是否正确?

很抱歉所有的困惑,这是我的作业中的实际问题。+所属的课程属于哪个,你如何检查?

3 个答案:

答案 0 :(得分:2)

其他编程语言中的大多数操作符只是Ruby中的一种方法。

+是一种非操作员的方法。你可以参考它:

1.method(:+)
#=> #<Method: Fixnum#+>

"".method(:+)
#=> #<Method: String#+>

FixnumString是实现+方法的许多类之一。您可以定义自己的类似运算符的方法:

class MyClass
  attr_accessor :number, :string

  def +(other)
    self.number += other.number
    self.string += other.string
    self
  end
end

Ruby中的true运算符示例,您无法使用其中一些“名称”定义自己的方法:

  • 赋值运算符:=
  • 操作和分配:+=-=*=/=%=**=
  • 按位运算符:&|^~<<>>
  • 逻辑运算符:andor&&||!not
  • 三元运营商:? :
  • 范围运算符:.....
  • 点和双冒号:.::

还有一个特殊的运算符defined?。它实际上看起来像一个方法,但它是一个运算符。不过,您可以定义自己的defined?方法。

答案 1 :(得分:1)

没有。它不属于特殊类,因为任何类都可以拥有它自己的+方法。您尝试做的只是检查程序类的+运算符。要在Ruby中看到所有内容都是一个类,只需运行此脚本

即可
#!/usr/bin/ruby

puts self.inspect

答案 2 :(得分:1)

你所说的“属于阶级”是很混乱的。从您的代码片段看,您的意思是“类的实例”。

如果这就是你的意思,那么答案是:这个问题没有意义。运算符不是对象。因此,它们不可能是类的实例。