如何在Scala中取消导出字符串“+”运算符?

时间:2010-04-18 22:36:44

标签: scala scala-2.8

我正在写一个DSL,其中“+”运算符是严格数字的,就像其他一些流行语言一样。它很接近,但String“+”运算符搞乱了我的隐式转换。 unmporting String类的运算符的语法是什么?

为了更清楚,而不是:

scala> var x = "2" + 3;
x: java.lang.String = 23

我想获得x:Int = 5

我想我只需要做两件事就可以实现:

  • 从Strings
  • 中删除(在我的范围内不引入)“+”的定义
  • 定义String到Int
  • 的隐式转换

我坚持第一步。

由于

3 个答案:

答案 0 :(得分:9)

根据Scala spec的第12.3.1节,+ String方法由编译器进行特殊处理。我不确定,但我认为这意味着你不能“不引用”它,这是一种耻辱,因为它确实打破了类型系统(很像相关的toString方法)。

您可以在DSL中为运营商使用其他名称,例如++&吗?

答案 1 :(得分:3)

字符串的+方法是String类的一个方法(因此在每个字符串对象上),因此不能不导入。

答案 2 :(得分:1)

你不能不引用它,但你可以使用+:并在int类上定义它。如果你这样写的最好的是:“2”.toInt + 3。