ほとんどの場合、オブジェクトのメソッドを呼び出すにはドット表記が必要です。オブジェクトとメソッド名をドットでつないでいると思いますが、算術演算では数値オブジェクトとその演算メソッドの間にスペースが入ります。例えば、
7.-(5)
はドット表記を使用し、次のように書くこともできます
7 - 5
演算子とオペランドの間にオプションのスペースを入れます。メソッド呼び出しをどのように実行できますか?
Syntactic Sugar for Special Methods
ruby のすべてのシンタックス シュガーを知るための良い情報源。
以下はすべて Ruby で同じです。
2 + 3 #=> 5
2.+(3) #=> 5
2.+ 3 #=> 5
あなたが書くとき2 + 3
、それは内部でまたはとして起こってい2.+(3)
ます2.+ 3
Ruby ではすべてがオブジェクトです。ここに2
もFixnum
オブジェクトがあります。.
object2
の+
メソッドを呼び出すだけです。
2.class #=> Fixnum
2.instance_of? Fixnum #=> true
2.respond_to? :+ #=> true
別の例を以下に示します。
"a" + "b" #=> "ab"
"a".+"b" #=> "ab"
"a".respond_to? :+ #=> true
respond_to
返さtrue
れる - これは、String
クラスに連結メソッドがあるため+
です。String クラスのオブジェクトであることは、そのメソッドに引数として渡すことによってメソッドを'a'
呼び出すことができます。+
b
Ruby は Python よりも直交していますが、完全に直交しているわけではありません。したがって、それには異常もあります。たとえば、for
キーワードもあります (それぞれの呼び出しに対して翻訳されます)。
for x in (1..3) do
puts x
end
持っているからといって、それがあなたにとって良いものであるとは限りません。for
のようなメソッドを使用することを実際に推奨する人は誰もいませんeach
。
+
を使用してメソッドを呼び出したり、オブジェクトに.
メッセージ+
を送信したりすることは、言語を本当に、真に、直交状態に保つためだけに行う価値のないことです。
Ruby のグラマティックを見ることができます。これは、この側面に興味がある場合は、他の非直交側面を見つけるのに役立つかもしれません。
メソッド呼び出しをどのように実行できますか?
まあ、これはシンタックスシュガーと呼ばれます。それは本当に特別なことではありません。これは、コードをもう少し理解しやすく、場合によっては読みやすくするための一般的な ruby メソッド呼び出し規則の例外にすぎません。
7.-(5)
よりも早く理解でき7 - 5
ますか? 私はそうは思わない。それが、この例外が存在する理由です。
それが可能なのは、Ruby インタープリターが any を読み取り、x - y
それを に翻訳するx.-y
だけでなく、x[y]
に翻訳しx.[](y)
たり、x[y] = z
に翻訳したりするためx.[]=(y, z)
です。
以下は、すべてのシンタックス シュガー呼び出し表記のリストです。
この画像は、The Well-Grounded Rubyistという非常に優れた本から取ったもので、パート 2 の第 7 章でこの概念について説明しています。