0

これは機能します。

print("scala" * 5)

これはしません。

print(5 * "scala")

両方が機能しないのはなぜですか?*オペレーターが通勤するのは意味がありませんか?

5 * "scala"編集:明確にするために、言語がInt のメソッドとして持っていない説得力のある理由があるかどうか疑問に思っていました。

4

3 に答える 3

3

*scala のオブジェクトに対する is メソッド:

"Scala" * 5*文字列オブジェクトのメソッド呼び出しと同じです。

5 * "Scala"*整数オブジェクトのメソッドを呼び出すことを意味します。

于 2013-10-18T05:28:01.957 に答える
1

print("scala" * 5)に評価されprint("scala".*(5))ます。

つまり、ストリングには*、整数パラメーターを使用してストリングを繰り返す演算子があります。

5 * "scala"と同じことを行うには"scala" * 5、次のように整数に対して定義された演算子が必要です。

def * (s: String) = s * x   // where x is the integer

ScalaIntにはそのような演算子はなく、それは理にかなっているようです。

たとえば、これで遊ぶことができます:

class MyInt(x: Int) {
  def * (s: String) = s * x
}

val a = new MyInt(5)
println(a * "scala")                 //> scalascalascalascalascala
于 2013-10-18T05:57:59.220 に答える