字符串重复运算符不通勤

时间:2013-10-18 05:17:46

标签: scala

这很有效。

print("scala" * 5)

这不是。

print(5 * "scala")

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

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

3 个答案:

答案 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")
}