引数を追加して合計できる汎用関数をscalaに実装するにはどうすればよいですか?

ロブ

引数を一緒に追加できるようにしたい場合、ジェネリック関数をどのように定義しますか?

def f[A <: (addition??)](first: A, second: A): Unit = println(first + second)
マリオガリック

たとえば、拡張メソッドを介してセミグループ型クラスインスタンスと中置+演算子を提供する

trait Semigroup[A] {
  def combine(x: A, y: A): A
}

case class Foo(v: Int)
case class Bar(a: String, b: String)

implicit val fooSemigroup: Semigroup[Foo] = (x: Foo, y: Foo) => Foo(x.v + y.v)
implicit val barSemigroup: Semigroup[Bar] = (x: Bar, y: Bar) => Bar(x.a + y.a, x.b + y.b)

implicit class SemigroupOps[A](x: A) {
  def +(y: A)(implicit ev: Semigroup[A]): A = ev.combine(x, y)
}

Foo(41) + Foo(1)                     // res0: Foo = Foo(42)
Bar("He", "wo") + Bar("llo", "rld")  // res1: Bar = Bar(Hello,world)

これで、メソッドを次のように制約できます。

def f[A](first: A, second: A)(implicit ev: Semigroup[A]): Unit = 
  println(first + second)

この回答は概念を説明することを目的としているため、実際には、ルイスのコメントに注意し、すぐに使用できる猫の施設を使用してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

BigQueryで汎用のOracleDECODE関数を実装するにはどうすればよいですか?

分類Dev

汎用BSTを実装するにはどうすればよいですか?

分類Dev

引数を使用してLuaでrfindを実装するにはどうすればよいですか?

分類Dev

(任意の)引数を使用して(任意の)関数を呼び出す関数を実装するにはどうすればよいですか?

分類Dev

関数の引数を結合して文字列を形成するにはどうすればよいですか?

分類Dev

`splitAt`を使用してVecに` rotate`関数を実装するにはどうすればよいですか?

分類Dev

RustでWindowsIOCPを使用して非同期関数を実装するにはどうすればよいですか?

分類Dev

Pythonを使用して `単項関数chainer`を実装するにはどうすればよいですか?

分類Dev

APIを使用して除外関数を実装するにはどうすればよいですか

分類Dev

typeOf関数を実装するにはどうすればよいですか?

分類Dev

関数を実装するにはどうすればよいですか?

分類Dev

Android:変数に5回追加して、合計秒数を取得するにはどうすればよいですか?

分類Dev

ImageToByteArray関数をより汎用的にするにはどうすればよいですか?

分類Dev

汎用可変引数のEnumSetを作成するにはどうすればよいですか?

分類Dev

gnuplotを使用して合計関数をプロットするにはどうすればよいですか?

分類Dev

関数を引数として別の関数に渡す場合、その関数をループするにはどうすればよいですか?

分類Dev

関数の引数としてプロトコルを実装するにはどうすればよいですか?

分類Dev

TSとTypeORMで汎用関数を作成するにはどうすればよいですか?

分類Dev

Linqtosqlで汎用のGetById(int Id)関数を生成するにはどうすればよいですか?

分類Dev

Linqtosqlで汎用のGetById(int Id)関数を生成するにはどうすればよいですか?

分類Dev

関数の引数として関数を使用するにはどうすればよいですか?

分類Dev

R:リストに合計関数を適用するにはどうすればよいですか?

分類Dev

Clojure言語のサブセットを使用してラムダ計算で再帰関数を実装するにはどうすればよいですか?

分類Dev

TypeScriptで型付きの「両方」の関数を実装するにはどうすればよいですか?

分類Dev

フレンド関数としてではなく、クラスのメンバー関数としてostream関数を実装して、仮想関数として使用できるようにするにはどうすればよいですか?

分類Dev

関数の実装で関数の関数の引数を使用するにはどうすればよいですか?

分類Dev

関数が配列を引数として取る場合、Numbaで関数をベクトル化するにはどうすればよいですか?

分類Dev

F#コンパイラに汎用関数への引数を推測させるにはどうすればよいですか?

分類Dev

さまざまな計算セットを実行できるdplyrを使用して関数を作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    BigQueryで汎用のOracleDECODE関数を実装するにはどうすればよいですか?

  2. 2

    汎用BSTを実装するにはどうすればよいですか?

  3. 3

    引数を使用してLuaでrfindを実装するにはどうすればよいですか?

  4. 4

    (任意の)引数を使用して(任意の)関数を呼び出す関数を実装するにはどうすればよいですか?

  5. 5

    関数の引数を結合して文字列を形成するにはどうすればよいですか?

  6. 6

    `splitAt`を使用してVecに` rotate`関数を実装するにはどうすればよいですか?

  7. 7

    RustでWindowsIOCPを使用して非同期関数を実装するにはどうすればよいですか?

  8. 8

    Pythonを使用して `単項関数chainer`を実装するにはどうすればよいですか?

  9. 9

    APIを使用して除外関数を実装するにはどうすればよいですか

  10. 10

    typeOf関数を実装するにはどうすればよいですか?

  11. 11

    関数を実装するにはどうすればよいですか?

  12. 12

    Android:変数に5回追加して、合計秒数を取得するにはどうすればよいですか?

  13. 13

    ImageToByteArray関数をより汎用的にするにはどうすればよいですか?

  14. 14

    汎用可変引数のEnumSetを作成するにはどうすればよいですか?

  15. 15

    gnuplotを使用して合計関数をプロットするにはどうすればよいですか?

  16. 16

    関数を引数として別の関数に渡す場合、その関数をループするにはどうすればよいですか?

  17. 17

    関数の引数としてプロトコルを実装するにはどうすればよいですか?

  18. 18

    TSとTypeORMで汎用関数を作成するにはどうすればよいですか?

  19. 19

    Linqtosqlで汎用のGetById(int Id)関数を生成するにはどうすればよいですか?

  20. 20

    Linqtosqlで汎用のGetById(int Id)関数を生成するにはどうすればよいですか?

  21. 21

    関数の引数として関数を使用するにはどうすればよいですか?

  22. 22

    R:リストに合計関数を適用するにはどうすればよいですか?

  23. 23

    Clojure言語のサブセットを使用してラムダ計算で再帰関数を実装するにはどうすればよいですか?

  24. 24

    TypeScriptで型付きの「両方」の関数を実装するにはどうすればよいですか?

  25. 25

    フレンド関数としてではなく、クラスのメンバー関数としてostream関数を実装して、仮想関数として使用できるようにするにはどうすればよいですか?

  26. 26

    関数の実装で関数の関数の引数を使用するにはどうすればよいですか?

  27. 27

    関数が配列を引数として取る場合、Numbaで関数をベクトル化するにはどうすればよいですか?

  28. 28

    F#コンパイラに汎用関数への引数を推測させるにはどうすればよいですか?

  29. 29

    さまざまな計算セットを実行できるdplyrを使用して関数を作成するにはどうすればよいですか?

ホットタグ

アーカイブ