这很有效。
print("scala" * 5)
这不是。
print(5 * "scala")
为什么不同时工作? *
运营商通勤是否有意义?
编辑:为了澄清,我想知道是否有令人信服的理由说明为什么语言没有5 * "scala"
作为Int的方法。
答案 0 :(得分:3)
*
是scala中对象的方法:
"Scala" * 5
与调用字符串对象的*
方法相同。
5 * "Scala"
表示调用整数对象的*
方法。
答案 1 :(得分:1)
print("scala" * 5)
评估为print("scala".*(5))
。
也就是说,字符串有一个运算符*
,它接受一个整数参数来重复字符串。
要使5 * "scala"
与"scala" * 5
相同,您需要为这样的整数定义运算符:
def * (s: String) = s * x // where x is the integer
在Scala Int
中没有这样的运算符,这似乎有意义。
你可以玩这个,例如:
class MyInt(x: Int) {
def * (s: String) = s * x
}
val a = new MyInt(5)
println(a * "scala") //> scalascalascalascalascala
答案 2 :(得分:0)
Scala没有5 * "scala"
作为Int上的方法,因为很容易添加。
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")
}