これは機能します。
print("scala" * 5)
これはしません。
print(5 * "scala")
両方が機能しないのはなぜですか?*オペレーターが通勤するのは意味がありませんか?
5 * "scala"編集:明確にするために、言語がInt のメソッドとして持っていない説得力のある理由があるかどうか疑問に思っていました。
これは機能します。
print("scala" * 5)
これはしません。
print(5 * "scala")
両方が機能しないのはなぜですか?*オペレーターが通勤するのは意味がありませんか?
5 * "scala"編集:明確にするために、言語がInt のメソッドとして持っていない説得力のある理由があるかどうか疑問に思っていました。
*scala のオブジェクトに対する is メソッド:
"Scala" * 5*文字列オブジェクトのメソッド呼び出しと同じです。
5 * "Scala"*整数オブジェクトのメソッドを呼び出すことを意味します。
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