14

Int、Doubles などの追加可能な要素を含むタプルを追加する簡単な方法はありますか? 例えば、

(1,2) + (1,3) = (2,5)
4

3 に答える 3

20

スカラス

import scalaz._, Scalaz._

scala> (1, 2.5) |+| (3, 4.4)
res0: (Int, Double) = (4,6.9)

スコープが暗黙的である|+|すべてのクラスの演算子があります。Forはデフォルトです (コードで再定義できます)。ASemigroup[A]Int |+|+

暗黙の for とSemigroup[(A, B)]がある場合、すべてのタプルに暗黙Semigroupの for がAありBます。

Scalaz チートシートを参照してください。

于 2013-10-26T12:45:37.047 に答える
13

Scalazの回答に+1 :-)

非常に単純なバージョンが必要な場合は、次のような暗黙のクラスを定義できます。

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、数値のより一般的なバージョン:

したがって、これは s に対してのみ定義された最も単純なバージョンであり、IntScala の を使用してすべての数値に対して生成できます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)
于 2013-10-26T12:54:01.970 に答える