4

ほとんどの場合、オブジェクトのメソッドを呼び出すにはドット表記が必要です。オブジェクトとメソッド名をドットでつないでいると思いますが、算術演算では数値オブジェクトとその演算メソッドの間にスペースが入ります。例えば、

7.-(5)

はドット表記を使用し、次のように書くこともできます

7 - 5

演算子とオペランドの間にオプションのスペースを入れます。メソッド呼び出しをどのように実行できますか?

4

4 に答える 4

5

Syntactic Sugar for Special Methodsruby のすべてのシンタックス シュガーを知るための良い情報源。

以下はすべて Ruby で同じです。

2 + 3   #=> 5
2.+(3)  #=> 5
2.+ 3 #=> 5

あなたが書くとき2 + 3、それは内部でまたはとして起こってい2.+(3)ます2.+ 3

Ruby ではすべてがオブジェクトです。ここに2Fixnumオブジェクトがあります。.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

于 2013-04-12T22:29:58.500 に答える
0

Ruby は Python よりも直交していますが、完全に直交しているわけではありません。したがって、それには異常もあります。たとえば、forキーワードもあります (それぞれの呼び出しに対して翻訳されます)。

for x in (1..3) do
  puts x
end

持っているからといって、それがあなたにとって良いものであるとは限りません。forのようなメソッドを使用することを実際に推奨する人は誰もいませんeach

+を使用してメソッドを呼び出したり、オブジェクトに.メッセージ+を送信したりすることは、言語を本当に、真に、直交状態に保つためだけに行う価値のないことです。

Ruby のグラマティックを見ることができます。これは、この側面に興味がある場合は、他の非直交側面を見つけるのに役立つかもしれません。

于 2013-04-12T22:33:41.703 に答える
0

メソッド呼び出しをどのように実行できますか?

まあ、これはシンタックスシュガーと呼ばれます。それは本当に特別なことではありません。これは、コードをもう少し理解しやすく、場合によっては読みやすくするための一般的な 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 章でこの概念について説明しています。

于 2013-04-13T02:11:08.807 に答える