[解決済み] Scalaのパス依存型とはどういう意味ですか?
2022-06-29 07:50:38
質問
Scalaにはパス依存の型があると聞いたことがあります。内部クラスと関係があるようですが、実際はどうなのでしょうか、またなぜ気になるのでしょうか。
どのように解決するのですか?
私の好きな例です。
case class Board(length: Int, height: Int) {
case class Coordinate(x: Int, y: Int) {
require(0 <= x && x < length && 0 <= y && y < height)
}
val occupied = scala.collection.mutable.Set[Coordinate]()
}
val b1 = Board(20, 20)
val b2 = Board(30, 30)
val c1 = b1.Coordinate(15, 15)
val c2 = b2.Coordinate(25, 25)
b1.occupied += c1
b2.occupied += c2
// Next line doesn't compile
b1.occupied += c2
ということで、型は
Coordinate
のインスタンスに依存します。
Board
のインスタンスに依存しています。これによって、型だけでなく値に依存した型安全性のようなものを実現することができるのです。
これは依存する型のように聞こえるかもしれませんが、より限定的です。例えば、型が
occupied
の値は
Board
. 上記では、最後の行が機能しないのは
c2
は
b2.Coordinate
であり、一方
occupied
の型は
Set[b1.Coordinate]
. 同じ型の別の識別子を使うことができることに注意してください。
b1
であるため
識別子
b1
というように、型と関連づけられる。例えば、以下のように動作します。
val b3: b1.type = b1
val c3 = b3.Coordinate(10, 10)
b1.occupied += c3
関連
-
[解決済み] java.lang.NoClassDefFoundError: scala/Product$class
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scalaの「リフティング」とは何ですか?
-
[解決済み】関数を定義する "def "と "val "の違いとは?
-
[解決済み】レイジーバルって何するもの?
-
[解決済み】ScalaのJavaConvertersとJavaConversionsの違いは何ですか?
-
[解決済み] マクロから匿名クラスのメソッドを持つ構造型を取得する
-
[解決済み] Scalaのパターンマッチングシステムで比較演算子を使う
-
[解決済み】Scalaはどこでimplicitを探すのか?
-
[解決済み] Scala における `#` 演算子の意味とは?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Scala subString関数
-
[解決済み] expr() での lit() の使用について
-
[解決済み] AWSのためのScala SDKまたはインターフェースはありますか?
-
[解決済み】Scalaにおける中括弧と括弧の正式な違い、また、どのような場合に使用すべきなのか?
-
[解決済み】ScalaのCaseオブジェクトとEnumerationsの比較
-
[解決済み】Scalaのウェブフレームワークは何がありますか?[クローズド]
-
[解決済み】Scalaの名前による呼び出しと値による呼び出し、明確化の必要性
-
[解決済み] Scalaの識別子 "implicitly "とは?
-
[解決済み] Scalaのパターンマッチングシステムで比較演算子を使う
-
[解決済み] データセットにカスタムオブジェクトを格納する方法は?