問題タブ [companion-object]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4463 参照

scala - Companion クラスには、Companion オブジェクト メソッドとネストされたオブジェクトのインポートが必要ですか?

私は Akka 関連の typesafe アクティベーター コードを調べており、次の構造に興味をそそられました。

コンパニオン オブジェクト:

Companion クラス:コンパニオン オブジェクト メソッドをインポートします。

だから..それは少し驚くべきことです。クラスがオブジェクトメソッドを自動的に「見る」ことを可能にするコンパニオンクラス/オブジェクト間に「特別な関係」がないのはなぜですか?

更新 私はこれに少し懐疑的だったので、先に進んで「import MarkerActor._」をコメントアウトしました。これにより、Companion クラスで「Symbol not found: Stop」エラーが発生しました。だから..インポートは本当に必要です。

0 投票する
2 に答える
227 参照

scala - コンパニオン オブジェクトを使用した static final に相当する Scala

以下をscalaに変換するにはどうすればよいですか。

回答がクラスとコンパニオン オブジェクトを作成するのを見てきましたが、これを行う方法と理由を正確に説明してもらえますか?

コンパニオン オブジェクトで静的変数として公開したいものを作成し、クラスで jedisPool を初期化するために使用される構成ファイルをロードする必要がありますか?

コンパニオン オブジェクトで jedisPool をパブリックまたはプライベートにするオプションはありますか?

また(私の質問への回答に影響を与えるのではなく、追加の利点として)、どこかで読みましたが、これによりパターンがテストを困難にすることを完全には理解していませんでした。回避策はありますか?

0 投票する
1 に答える
1241 参照

scala - Scala オブジェクトを動的にロードする

データベースを操作するオブジェクト (クラスではない) がいくつかあります。小さなヘルパー クラスを作成して、メソッドjava my.helper.class my.database.classを実行できるようにしたいと考えています。run

たとえば、これはコンパイルされます

そして、私が期待することをします。

これもコンパイルします

しかし、これは起こります:

これは理にかなっており、これでうまくいくと思いました:

しかし、それも失敗します。これらすべての静的オブジェクトをクラスにできることはわかっていますが、このアプリケーションでは意味がないので、これを行うためのエレガントな方法を具体的に探しています。

0 投票する
1 に答える
148 参照

scala - Scala (コンパニオン オブジェクト) で Abstact Class と Factory を使用する場合に相互にメソッドを呼び出す

第 10 章型階層 ( http://www.artima.com/pins1ed/composition-and-inheritance.html ) の「Programming in Scala」に従っています。

Scala インタラクティブ シェルで次のエラーが表示されます。

1) 私のオブジェクトがコンパニオン クラスを認識できない (「要素を拡張」) 2) メソッドが同じクラス/コンパニオン オブジェクト内の別のメソッドを呼び出せない理由は誰にもわかりますか?

クラスを次のように設定しています。

ご協力いただきありがとうございます!


更新: :load の代わりに :paste を試しましたが、次のエラー メッセージが表示されます。

0 投票する
3 に答える
415 参照

scala - コンパニオン オブジェクトのクラス

コンパニオン オブジェクトが表すクラスを取得するにはどうすればよいですか? 例えば:

コンパニオン User オブジェクトがある場合:

私の質問は、「真の」ケースクラスクラスを取得するにはどうすればよいですか? コンパニオン オブジェクト内で this.getClass を使用しようとしているときに、これが奇妙な「プライベート」コンストラクターを取得する原因となっているリフレクションのインスタンスがあります。

0 投票する
1 に答える
197 参照

scala - コンパニオン オブジェクトから暗黙的にインポートされるのはいつですか?

私はこれが暗黙/コンパニオンオブジェクトに関する非常に多くの質問であることを知っています。ただし、このケースはまだどこにも見つかりませんでした。

「Tryout」で、A は暗黙のクラスのインポートを必要としないのに、B はそれを必要とするのはなぜですか? ありがとう。

0 投票する
3 に答える
5293 参照

scala - 置換されたコンパイラ提供の暗黙的なコンパニオン オブジェクトと同じように動作する、ケース クラスの明示的なコンパニオン オブジェクトを作成するにはどうすればよいですか?

私はそのように定義されたケースクラスを持っています:

次に、明示的なコンパニオン オブジェクト を定義します。

明示的なコンパニオン オブジェクト StreetSecondary を定義すると、コンパイラによって生成された "暗黙的なコンパニオン オブジェクト" が失われます。つまり、コンパイラによって生成されたバージョンにアクセスできなくなります。たとえば、tupledメソッドは、この暗黙的なコンパニオン オブジェクトを介してケース クラス StreetSecondary で使用できます。ただし、明示的なコンパニオン オブジェクトを定義すると、tupledメソッドは「失われます」。

では、上記の StreetSecondary の明示的なコンパニオン オブジェクトを定義/追加/変更して、コンパイラが提供する暗黙的なコンパニオン オブジェクトを置き換えることで失われたすべての機能を取り戻すにはどうすればよいでしょうか? tupledそして、メソッドが復元されるだけではありません。すべての機能 (extractor/ を含むなどunapply) を復元したい。

あなたが提供できる指示/ガイダンスに感謝します。


更新 1

いくつかのことを発見するのに十分な検索を行いました:

A) 明示的なコンパニオン オブジェクトは、そのケース クラスの前に定義する必要があります (少なくとも Eclipse Scala-IDE WorkSheet ではそうであり、コードは IntelliJ IDE の WorkSheet では、どちらが先であっても機能しません)。

B) 強制的に動作させるための技術的なトリックがありtupledます (drstevens に感謝します): これで特(StreetSecondary.apply _).tupled​​定のメソッドの問題は解決tupledされますが、暗黙のコンパニオン オブジェクトで scala コンパイラが提供しているものを正確または完全に説明することはできません。

C) 最後に、明示的なコンパニオン オブジェクトを定義して、プライマリ コンストラクタのパラメータのシグネチャに一致し、ケース クラスのインスタンスを返す関数を拡張できます。次のようになります。

繰り返しになりますが、暗黙のコンパニオン オブジェクトで scala コンパイラが提供しているものを正確に、または完全に説明する自信はまだありません。

0 投票する
1 に答える
361 参照

scala - 値オブジェクトの可視性のためのケース クラス?

値オブジェクトを表すケースクラスの可視性を制御する価値はありますか? もしそうなら、ケースクラスの可視性修飾子で十分ですか、または明示的なコンパニオンオブジェクトとプライベートコンストラクターを使用する方が良いでしょうか?

バージョン 1:

バージョン 2:

要するに、問題は、scala で値オブジェクトを処理する方法として要約できます。私は個人的に新しいことを強制したいので、オブジェクトの作成で何かを変更したいのですが、いつでも変更できます。つまり、必要に応じてコンパニオン オブジェクトを追加するだけです。