1

私が理解しているように、ルビーで2つの数値を追加すると、次のオブジェクトとしてパラメーターを使用して現在のオブジェクトで「+」メソッドが呼び出されます。

>> 2 + 3
=> 5



>> 2.+(3)
=> 5

これらの 2 つの例はどのように同じで、ドット演算子なしでオブジェクトのメソッドを呼び出すことができるのでしょうか? 最初の例ではどのように起こっていますか? その場合、「+」メソッドで呼び出されるメソッド メソッドである可能性がありますか? (それも意味不明)

4

2 に答える 2

4

+言語の文法がそう言っているので、Rubyはそれが演算子であることを知っています。単項+演算子(+@メソッドに変換される)もあり、言語の文法により、Rubyはどちらがどれであるかを知ることができます。言語定義では、演算子はメソッド呼び出しとして実装され、各演算子がどのメソッドにマップされるかを指定します。

あなたが求めているのは、引数としてメソッドを呼び出すo.m a方法を尋ねるのと同じです。これが、Rubyの構文とセマンティクスの定義方法です。moa

演算子は理論数学でも関数です。このa + b表記は、実際には便利な表記です+(a, b)(たとえば+R 2RまたはR × RからRへの関数)。表記法を読みすぎて、演算子は特別なものだと思っていると思います。演算子は特別なものではなく、コンピュータ言語と数学の関数呼び出しにすぎません。

つまり、Rubyが機能するように定義されているため、機能します。

の限り

3は'+'メソッドで呼び出されるメソッドメソッドである可能性がありますか?

関係しているの3は、Fixnumオブジェクトのメソッドへの引数またはパラメータです。+2

于 2011-10-29T03:24:35.980 に答える
1

a + b は、a.+(b) の単なるシュガー構文です。ruby では、ほとんどすべてがオブジェクトであり、「演算子」でさえ実際には数値のメソッドです。砂糖の構文以上の魔法はありません。

于 2011-10-29T03:53:12.607 に答える