【发布时间】:2015-12-15 22:01:38
【问题描述】:
假设我有以下方法:
def main(args: Array[String]): Unit = {
println(Ring(2) + Ring(3) + Ring(-1) + Ring(10))
}
产生:
( [2] left-> ( [-1] left-> null, right-> null), right-> ( [3] left-> null, right-> ( [10] left-> null, right-> null)))
我想编写一个隐式转换,它允许我按以下方式编写代码:
def main(args: Array[String]): Unit = {
val r :Ring = 2 + 3 + (-1) + 10
println(r)
}
但遵循隐式方法
implicit def intToRing(x :Int): Ring = {
new Ring(x)
}
以这种方式工作,首先它总结了所有元素,然后创建生成的环:
([14]左->空,右->空)
是否有可能实现“不贪婪”的隐式转换来实现我想要的?
【问题讨论】:
-
拨打
main时,您希望得到什么结果?Ring(14)? -
( [2] left-> ( [-1] left-> null, right-> null), right-> ( [3] left-> null, right-> ( [10] left-> null, right-> null)))
-
我不清楚
println(Ring(2) + Ring(3) + Ring(-1) + Ring(10))是如何打印为( [2] left-> ( [-1] left-> null, right-> null), right-> ( [3] left-> null, right-> ( [10] left-> null, right-> null)))的。能多说点吗? -
我已经覆盖了 tostring 方法,但它并不相关,这就是我没有粘贴它的原因。看看@shadowslands 的答案,他明白了。