[解決済み] なぜScalaのimmutable Setは型が共変しないのか?
2023-01-13 01:32:12
質問
編集 : 元の回答に基づいてこの質問を書き直しました。
その
scala.collection.immutable.Set
クラスはその型パラメタが共変でありません。これはなぜでしょうか?
import scala.collection.immutable._
def foo(s: Set[CharSequence]): Unit = {
println(s)
}
def bar(): Unit = {
val s: Set[String] = Set("Hello", "World");
foo(s); //DOES NOT COMPILE, regardless of whether type is declared
//explicitly in the val s declaration
}
どのように解決するのですか?
Set
は、関数としてのセットの背後にある概念のため、その型パラメータに不変である。 以下のシグネチャは物事を少し明確にするはずです。
trait Set[A] extends (A=>Boolean) {
def apply(e: A): Boolean
}
もし
Set
が共変数であった場合
A
で共変している。
apply
型のパラメータを受け取ることができません。
A
型のパラメータを取ることができません。
Set
は潜在的に
反変
で
A
のようにしたい場合、これも問題が発生します。
def elements: Iterable[A]
要するに、イミュータブルなデータ構造であっても、物事を不変に保つことが最良の解決策なのです。 お気づきのように
immutable.Map
はその型パラメータの一つでも不変であることに気づきます。
関連
-
[解決済み】Scalaの型消去を回避するにはどうしたらいいですか?または、なぜ私のコレクションの型パラメータを取得することができないのですか?
-
[解決済み] なぜ配列は共変であり、ジェネリックは不変なのですか?
-
[解決済み] RDDの内容を印刷するには?
-
[解決済み] 共変量戻り値型とは何ですか?
-
[解決済み] HDFSではなく、ローカルファイルをsc.textFileで読み込む方法
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Scalaでmapを使用してインデックスを受け取るにはどうしたらいいですか?
-
[解決済み] 末尾再帰関数が最適化されるためのScalaアノテーションは何ですか?
-
[解決済み] Scalaのcaseクラスを宣言することのデメリットは何ですか?
-
[解決済み] Scalaです。ScalaのコレクションにおけるTraversableとIterableの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 依存するメソッドタイプの説得力のある使用例とは?
-
[解決済み] SBTが終了せずに実行を停止する
-
[解決済み] Scalaです。リスト[Future]からFuture[List]への変換は、失敗したFutureを無視する。
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Scalaにおけるval-mutableとvar-immutableの比較
-
[解決済み] Scalaです。ScalaのコレクションにおけるTraversableとIterableの違いは何ですか?
-
[解決済み] Scalaでimmutable.Mapをmutable.Mapに変換するにはどうしたらいいですか?
-
[解決済み] Scalaでマップを反転させるエレガントな方法
-
[解決済み] scala で複数の case class をマッチングさせる
-
[解決済み] なぜ `private val` と `private final val` は違うのですか?