[解決済み] パッケージオブジェクト
2023-02-13 17:47:13
質問
パッケージオブジェクトとは何でしょうか?
サンプルを動作させようとしたところ、以下のような形でしか動作しませんでした。
package object investigations {
val PackageObjectVal = "A package object val"
}
package investigations {
object PackageObjectTest {
def main(args: Array[String]) {
println("Referencing a package object val: " + PackageObjectVal)
}
}
}
今までの観察では
package object _root_ { ... }
は許可されません(これは合理的です)。
package object x.y { ... }
も禁止されています。
パッケージオブジェクトは直系の親パッケージで宣言する必要があるようで、上記のように書くと、ブレースで区切られたパッケージ宣言形式が必要です。
これらは一般的に使用されているのでしょうか?もしそうなら、どのように?
どのように解決するのですか?
通常、パッケージ・オブジェクトを別のファイルである
package.scala
という別のファイルに置きます。ネストされたパッケージ構文を使うこともできますが、これはかなり珍しいことです。
パッケージオブジェクトの主な用途は、パッケージ内の様々な場所で定義が必要な場合と、パッケージによって定義されたAPIを使用する際にパッケージの外側で定義が必要な場合です。以下はその例です。
// file: foo/bar/package.scala
package foo
package object bar {
// package wide constants:
def BarVersionString = "1.0"
// or type aliases
type StringMap[+T] = Map[String,T]
// can be used to emulate a package wide import
// especially useful when wrapping a Java API
type DateTime = org.joda.time.DateTime
type JList[T] = java.util.List[T]
// Define implicits needed to effectively use your API:
implicit def a2b(a: A): B = // ...
}
これで、そのパッケージオブジェクトの中の定義が、パッケージ全体で利用できるようになりました。
foo.bar
. さらに、そのパッケージの外からインポートされた定義もインポートされます。
foo.bar._
.
この方法により、あなたのライブラリを効果的に使用するために、APIクライアントに追加のインポートを要求することを防ぐことができます - 例えば、scala-swingでは、次のように記述する必要があります。
import swing._
import Swing._
のように、すべての良さを持つように
onEDT
からの暗黙の変換と
Tuple2
から
Dimension
.
関連
-
[解決済み】ScalaのCaseオブジェクトとEnumerationsの比較
-
[解決済み】タスクがシリアライズされない:オブジェクトではなくクラスに対してのみクロージャの外で関数を呼び出すとjava.io.NotSerializableExceptionが発生する
-
[解決済み] 依存するメソッドタイプの説得力のある使用例とは?
-
[解決済み] ネストした構造体をよりきれいに更新する方法
-
[解決済み] scalaの列挙を理解する
-
[解決済み] Scalaでmapを使用してインデックスを受け取るにはどうしたらいいですか?
-
[解決済み] Apache SparkでDataframeのカラム値をListとして抽出する。
-
[解決済み] scalaでサブディレクトリ内の全ファイルをリストアップするには?
-
[解決済み] Scalaのtraitでvalとdefの使い分けは?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 述語で配列を2つに分割するには?
-
[解決済み] IntelliJ IDEAで依存関係が変更された後、build.sbtから強制的に再ロードするには?
-
[解決済み] Scalaの配列の初期化
-
[解決済み] Scalaのリストを作成するための好ましい方法
-
[解決済み] 末尾再帰関数が最適化されるためのScalaアノテーションは何ですか?
-
[解決済み] Scalaにおけるparam: _*の意味とは?
-
[解決済み] Scalaのcaseクラスを宣言することのデメリットは何ですか?
-
[解決済み] なぜScalaのimmutable Setは型が共変しないのか?
-
[解決済み] IntelliJ IDEAでSBTを使用してUber JAR (Fat JAR)をビルドする方法は?
-
[解決済み] scala.concurrent.Promiseのユースケースは何ですか?