整数上的Scala隐式转换

整数上的Scala隐式转换,scala,implicit-conversion,Scala,Implicit Conversion,假设我有以下方法: def main(args: Array[String]): Unit = { println(Ring(2) + Ring(3) + Ring(-1) + Ring(10)) } 产生: ([2]左->([-1]左->空,右->空),右->([3]左-> 空,右->([10]左->空,右->空))) 我想编写一个隐式转换,它允许我以以下方式编写代码: def main(args: Array[String]): Unit = { val r :R

假设我有以下方法:

  def main(args: Array[String]): Unit = {
    println(Ring(2) + Ring(3) + Ring(-1) + Ring(10))
  }
产生:

([2]左->([-1]左->空,右->空),右->([3]左-> 空,右->([10]左->空,右->空)))

我想编写一个隐式转换,它允许我以以下方式编写代码:

 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]左->空,右->空)


是否可以实现“非贪婪”隐式转换,从而实现我想要的?

您应该能够通过显式转换第一个Int来实现这一点:

val r = (2: Ring) + 3 + (-1) + 10
这迫使编译器寻找将“3”添加到
环的方法,这将强制进行隐式转换,否则它可以愉快地使用整数加法,而无需查找隐式转换

我能想到的唯一其他方法是为
Ring
提供一个替代方法名(直接或通过隐式包装类等),例如:

并使用该运算符:

val r = 2 +^ 3 +^ (-1) +^ 10

您应该能够通过显式转换第一个Int来实现这一点:

val r = (2: Ring) + 3 + (-1) + 10
这迫使编译器寻找将“3”添加到
环的方法,这将强制进行隐式转换,否则它可以愉快地使用整数加法,而无需查找隐式转换

我能想到的唯一其他方法是为
Ring
提供一个替代方法名(直接或通过隐式包装类等),例如:

并使用该运算符:

val r = 2 +^ 3 +^ (-1) +^ 10

调用
main
时,您希望得到什么结果<代码>环(14)
?([2]左->([1]左->零,右->零),右->([3]左->零,右->([10]左->零,右->零)))我不清楚
println(环(2)+环(3)+环(-1)+环(10))
如何打印为
([2]左->([1]左->零,右->零),右->([3]左零,右->([10]左->空,右->空)
。您能说得更多吗?我必须重写tostring方法,但它没有太大的相关性,这就是为什么我没有粘贴它。查看@shadowslands的答案,他明白了。当调用
main
时,您希望得到什么结果<代码>环(14)
?([2]左->([1]左->零,右->零),右->([3]左->零,右->([10]左->零,右->零)))我不清楚
println(环(2)+环(3)+环(-1)+环(10))
如何打印为
([2]左->([1]左->零,右->零),右->([3]左零,右->([10]左->空,右->空)
。您能说得更多吗?我必须重写tostring方法,但它没有太大的相关性,这就是为什么我没有粘贴它。看看@shadowslands的答案吧,他说到点子上了。