[解決済み] Scalaのオブジェクトとクラスの違い
2022-03-14 09:04:28
質問
インターネット上のScalaチュートリアルを見ていて、いくつかの例で、オブジェクトが例の最初に宣言されていることに気づきました。
とはどのような違いがあるのでしょうか?
class
と
object
をScalaで使うのですか?
どのように解決するのですか?
tl;dr
-
class C
は、JavaやC++と同じようにクラスを定義します。 -
object O
を作成します。 シングルトン オブジェクトO
これは、あるクラスのインスタンスに関連付けられない静的メンバを保持するために使用されます。 -
object O extends T
は、オブジェクトをO
のインスタンスです。trait T
を渡すことができます。O
は、どこでもT
が期待されます。 -
がある場合は
class C
であればobject C
は コンパニオンオブジェクト のクラスC
コンパニオンオブジェクトは ではなく のインスタンスが自動的に作成されます。C
.
については、Scala のドキュメントも参照してください。 オブジェクト と クラス .
object
静的メンバのホストとして
多くの場合
object
メソッドや値/変数を保持し、クラスのインスタンスを作成することなく使用できるようにします。
この使い方は
static
のメンバーである。
object A {
def twice(i: Int): Int = 2*i
}
上記のメソッドを呼び出すには
A.twice(2)
.
もし
twice
が、あるクラスのメンバーであった場合
A
であれば、まずインスタンスを作成する必要があります。
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
というように、いかに冗長であるかがわかると思います。
twice
は、インスタンス固有のデータを必要としません。
object
特別な名前のついたインスタンスとして
また
object
をクラスやトレイトの特別なインスタンスとして使用することができます。
この場合、あなたのオブジェクトはいくつかの
trait
のサブクラスのインスタンスになることができます。
次のようなコードを考えてみましょう。
object A extends B with C {
...
}
この宣言では,まず,無名の(アクセスできない)クラスを宣言し,そのクラスは
B
と
C
という名前のこのクラスのインスタンスを作成します。
A
.
これはつまり
A
型のオブジェクトを期待する関数に渡すことができます。
B
または
C
または
B with C
.
の追加機能
object
また、Scalaにはオブジェクトの特殊な機能がいくつか存在します。 この辺は 公式ドキュメント .
関連
-
[解決済み] Scalaのリターン
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] ( for... in ) と ( for... of ) の文の違いは何ですか?
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】Scalaにおける中括弧と括弧の正式な違い、また、どのような場合に使用すべきなのか?
-
[解決済み】Scalaのvarとvalの定義の違いは何ですか?
-
[解決済み] 2つのマップをマージし、同じキーの値を合計するための最良の方法?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Sparkです。CoarseGrainedSchedulerが見つかりませんでした。
-
[解決済み] scala 2.11.0 REPL を終了するには?
-
[解決済み] Scalaの「コンテキストバウンド」とは何ですか?
-
[解決済み] Scalaで定期的に関数を実行する
-
[解決済み] TimeoutExceptionが発生した場合、どのような原因が考えられるでしょうか。Sparkで作業しているときに[n秒]後にFuturesがタイムアウトしました[重複]。
-
[解決済み] scalaのforeachループ
-
[解決済み】関数を定義する "def "と "val "の違いとは?
-
[解決済み] 型の論理和(ユニオン型)はどのように定義するのですか?
-
[解決済み] sbtのScalaTest:タグなしで単一のテストを実行する方法はありますか?
-
[解決済み] なぜ静的メソッドはメソッドとみなされるのですか?