0

Rubyの演算子は特定のクラスに属していますか?私の知識によれば、演算子は、実行する予定の操作に従ってクラスによって再定義されるトークンです。たとえば、Numericクラスは数値演算の+演算子を定義し、同様にStringクラスは文字列連結の+演算子を定義します。だから私がこれをやろうとするとそれに基づいて:

    +.is_a ? (Numeric)

falseを返します。この質問に対する私の説明は正しいですか?

混乱して申し訳ありませんが、これは私の課題からの実際の質問です。+はどのクラスに属し、どのようにチェックしますか?

4

3 に答える 3

2

他のプログラミング言語の演算子のほとんどは、Rubyの単なるメソッドです。

+演算子ではなくメソッドです。あなたはそれへの参照を得ることができます:

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

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

FixnumStringは、メソッドを実装する多くのクラスの1+つです。独自の演算子のようなメソッドを定義できます。

class MyClass
  attr_accessor :number, :string

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

Rubyの真の演算子の例では、これらの「名前」のいくつかを使用して独自のメソッドを定義することはできません。

  • 代入演算子:=
  • アクションと割り当て:、、、、、、+=_-=*=/=%=**=
  • ビット演算子:、、、、、、&_|^~<<>>
  • 論理演算子:、、、、、、and_ or_&&||!not
  • 三項演算子:? :
  • 範囲演算子:.....
  • ドットとダブルコロン:.::

特別な演算子もありますdefined?。実際にはメソッドのように見えますが、演算子です。defined?ただし、独自のメソッドを定義することはできます。

于 2012-09-18T10:24:03.287 に答える
1

「クラスに所属する」とは、かなり混乱します。コードスニペットからは、「クラスのインスタンス」を意味しているように見えます。

それがあなたの言いたいことなら、答えは次のとおりです。質問は意味がありません。演算子はオブジェクトではありません。したがって、それらをクラスのインスタンスにすることはできません。

于 2012-09-18T07:53:43.760 に答える
1

いいえ。どのクラスにも独自の+メソッドを持つことができるため、特定のクラスには属していません。あなたがやろうとしていることは、単に+プログラムクラスの演算子をチェックすることでした。Rubyですべてがクラスであることを確認するには、このスクリプトを実行するだけです。

#!/usr/bin/ruby

puts self.inspect
于 2012-09-18T07:52:43.820 に答える