有没有一种简单的方法来添加包含可添加元素(如 Int、Doubles 等)的元组?例如,
(1,2) + (1,3) = (2,5)
Scalaz
import scalaz._, Scalaz._
scala> (1, 2.5) |+| (3, 4.4)
res0: (Int, Double) = (4,6.9)
对于作用域中具有隐式Semigroup[A]
的任何类A
,都有一个运算符|+|
。因为Int
|+|
默认+
(您可以在代码中重新定义它)。
如果对 A
和 B
有隐式Semigroup
,则所有元组都有一个隐式Semigroup[(A, B)]
。
请参阅斯卡拉兹备忘单。
+1 表示 Scalaz 答案 :-)
如果你想要一个非常简单的版本,你可以定义一个隐式类,比如:
implicit class TuppleAdd(t: (Int, Int)) {
def +(p: (Int, Int)) = (p._1 + t._1, p._2 + t._2)
}
(1, 1) + (2, 2) == (3, 3)
update1,数字的更通用版本:
所以这是最简单的版本,只为 Int
s 定义,我们可以使用 Scala 的Numeric
为所有数值生成它:
implicit class Tupple2Add[A : Numeric, B : Numeric](t: (A, B)) {
import Numeric.Implicits._
def + (p: (A, B)) = (p._1 + t._1, p._2 + t._2)
}
(2.0, 1) + (1.0, 2) == (3.0, 3)
也适用于Cats
,类似于scalaz
答案:
> (1,2) |+| (1,3)
res3: (Int, Int) = (2, 5)
同样,它依赖于Semigroup
.