1. ホーム
  2. scala

[解決済み] Scalaの「コンテキストバウンド」とは何ですか?

2022-02-16 12:01:28

質問

Scala 2.8の新機能の1つにコンテキスト・バウンズがあります。コンテキストバウンドとは何か、どこで役に立つのか?

もちろん、まず検索してみました(そして、例えば これ しかし、本当に明確で詳細な情報は見つかりませんでした。

どのように解決するのですか?

は見つかりましたか? この記事 ? 配列の改良の中で、新しいコンテキストバウンド機能を取り上げています。

一般に、型パラメータに コンテキストバウンド は、次のような形式です。 [T: Bound] に展開されます。 T という型の暗黙のパラメータと一緒に Bound[T] .

メソッドを考えてみましょう。 tabulate を適用した結果から配列を形成するものです. 0から与えられた長さまでの数値の範囲に対して、与えられた関数fを実行します。Scala 2.7までは、tabulateは以下のようになります。 は次のように記述します。

def tabulate[T](len: Int, f: Int => T) = {
    val xs = new Array[T](len)
    for (i <- 0 until len) xs(i) = f(i)
    xs
}

Scala 2.8では、これはもはや不可能です。 Array[T] . この情報を提供するために ClassManifest[T] を暗黙のパラメータとしてメソッドに渡すことができます。

def tabulate[T](len: Int, f: Int => T)(implicit m: ClassManifest[T]) = {
    val xs = new Array[T](len)
    for (i <- 0 until len) xs(i) = f(i)
    xs
}

省略形として コンテキストバウンド は、型パラメータ T となります。

def tabulate[T: ClassManifest](len: Int, f: Int => T) = {
    val xs = new Array[T](len)
    for (i <- 0 until len) xs(i) = f(i)
    xs
}