0

这行得通。

print("scala" * 5)

这没有。

print(5 * "scala")

为什么不同时工作?*运营商通勤没有意义吗?

编辑:澄清一下,我想知道是否有一个令人信服的理由为什么该语言没有5 * "scala"作为 Int 的方法。

4

3 回答 3

3

*是 scala 中对象的方法:

"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 回答
0

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")
}   
于 2013-10-22T04:02:38.490 回答