这行得通。
print("scala" * 5)
这没有。
print(5 * "scala")
为什么不同时工作?*
运营商通勤没有意义吗?
编辑:澄清一下,我想知道是否有一个令人信服的理由为什么该语言没有5 * "scala"
作为 Int 的方法。
这行得通。
print("scala" * 5)
这没有。
print(5 * "scala")
为什么不同时工作?*
运营商通勤没有意义吗?
编辑:澄清一下,我想知道是否有一个令人信服的理由为什么该语言没有5 * "scala"
作为 Int 的方法。
*
是 scala 中对象的方法:
"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
Scala 在 Int 上没有5 * "scala"
作为方法很好,因为可以很容易地添加它。
package com.example{
class RichInt2(val num: Int) {
def *(str: String): String = {
str * num
}
}
object RichInt2 {
implicit def intToRichInt2(n: Int) = new RichInt2(n)
}
}
import com.example.RichInt2._
object Run extends App {
print(5 * "scala")
}