scala - 可以创建" Int增量扩展方法"可以从任何包调用吗?

时间:2017-11-30 16:08:14

标签: scala

我想知道我是否可以创建隐式增量或者" ++"运营商on" Int"类型 我可以从我的代码中的任何范围调用。

(即从任何包裹中)

所以例如:

var x = 4
x++
println(x) // will print 5

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在高级别创建隐式类(util包)。我能够使用显式类型归属实现这一点:

object RichPrimitive {
  implicit class RichInt(var int: Int) {
    def ++ = int = int + 1
  }
}

import RichPrimitive.RichInt

var x: RichInt = 4 // if you don't do : RichInt, this does not work
x ++

println(x.int) // returns 5

不完全确定为什么隐含没有处理它(println没有它x返回4)。

答案 1 :(得分:0)

没有

  1. 隐含类不允许您更改变量。请注意,这与mutability与immutability不同(即将1更改为2正在更改变量,而不是对Int进行变更。相比之下,向collection.mutable.Map添加值正在改变Map,而不是更改保存地图的变量)
  2. 即使他们确实允许您更改变量,如果要在定义它们的范围之外使用它们,也总是需要导入隐式类。您可以在代码中的主程序包的包对象中定义implicit class RichInt,但如果要从任何其他程序包中使用它,您仍然需要导入它。
  3. 那就是说,@ Tanjin的回答是你想要的一个很好的近似。