0
"Inches/yard: #{12*3}"
"#{"Tora! "*3}"

2番目の例は、すべてがRubyのオブジェクトであることを覚えていない限り、混乱を招きます(そうです、文字列リテラルですら!クラスStringです)。文字列リテラルはStringオブジェクトを作成するため、他のオブジェクトと同じように操作できます。この場合、文字列に3を掛けると、考えられることを簡単に実行できます。つまり、文字列のコピーを3つ作成します。

私はルビーの本の1つで上記のパラグラフを読みました。最初の行は、すべてがRubyのオブジェクトであることを覚えていない限り、2番目の例は紛らわしいと言っています。私が覚えておくべき2番目の例には何がありますか?すべてがルビーのオブジェクトですか?3を掛けるとトラが3回印刷されるのは単なる特徴ではありませんか?

上記の段落から著者が私に何を理解してほしいのか正確にはわかりません

4

3 に答える 3

1

「Tora!a」はStringクラスのインスタンスです。その上でメソッドを呼び出すことができます。これは、PHPなどの多くの言語では不可能です。

(「*」は単なるメソッド名です)

于 2012-06-08T20:48:09.870 に答える
1

そうですね、おそらくそれは機能と見なすことができますが、作者がおそらく説明しようとしているのは(少なくともこの1つの段落ではあまり明確ではありませんが)、実際に起こっていることは次のとおりです。

  1. "Tora !"クラスのオブジェクトですString「すべてがオブジェクトです」
  2. 他のオブジェクトと同じように操作できます」、つまり「他のオブジェクトと同じようにメソッド
    を 呼び出すことができます」。 この場合、メソッドを呼び出しています(乗算)。
    *

したがって、実際に起こっていることは、"Tora !" Stringが次のような方法で呼び出されることです。

"Tora ! ".*(3)
=> "Tora ! Tora ! Tora ! "

分かりますか?演算子は、オブジェクト*の単なるメソッドです。String

多くのより単純な言語では、演算子は実際には言語自体に「焼き付け」られており、メソッド呼び出しとしてターゲットを操作しません。

他の言語に慣れていない場合は、Rubyでは通常の日常業務であるため、それほど注目に値するものではないかもしれません。入力する必要はありません。入力1.+(2)すると、Rubyが自動的に入力します1 + 2

したがって、これは作成者が覚えておいてほしいことです。すべての演算子と操作は、基本的に他のオブジェクトに対するメソッド呼び出しです。

于 2012-06-08T21:27:06.167 に答える
1
"#{"Tora! "*3}" 

「3を掛けるとトラが3回印刷されるのはただの特徴ではないですか?」

それは不正確です。Rubyには乗算演算子のようなものはありません。StringオブジェクトとNumericオブジェクトの両方で定義されたメソッドあります".*"(パーサーは「*」を同じように扱います)(ただし、どちらも何も出力しません)。それらは非常に異なることをしますが、結果はあなたが期待するものです。

まあ、おそらくこれは作者があなたに理解してほしかったことではなかったでしょう、とにかくそれは重要です。

于 2012-06-08T23:01:48.067 に答える