問題タブ [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.
scala - Scala クラスとコンパニオン オブジェクトで重複する型エイリアスを避ける
私は Scala の初心者で、クラスとコンパニオン オブジェクトを含む Scala プログラムを持っており、使用される型エイリアスを使用したいと考えています。
- クラスのメソッドを定義します。
- また、クラス外でエイリアスを使用したい。そのためには、コンパニオン オブジェクトでエイリアスを定義し、コンパニオン オブジェクトからエイリアスをインポートすると便利です。また、コンパニオン オブジェクトでいくつかの Implicit を定義しているので、これは当然のことです。
具体的なコードはhttps://github.com/juanrh/Surus/blob/1cfd55ed49c4d1b22e53babe07bcf44fd74e3072/src/main/scala/org/surus/spark/SurusRDDFunctions.scalaで入手できます。型エイリアスは PMMLPrediction で、クラスは SurusRDDFunctions です。現在、コードは機能しますが、クラスとコンパニオンの両方でエイリアスを定義しましたが、これはあまり良くありません。クラス内のエイリアスの定義を削除すると、クラスはそれを見つけることができなくなります。これは奇妙に思えます。だから私はおそらく何か間違ったことをしていると思います、何かアイデアはありますか?
ご協力いただきありがとうございます。
ご挨拶、
ファン
scala - 他の型クラスからの暗黙の def 型クラス
暗黙の Fractional または Integral 型クラスを既に持っているすべての型 T に対して、新しい暗黙の型クラス Divisible を追加したいと考えています。
私が書いたコードはコンパイルされません:
私が受け取っているエラーは次のとおりです。
パラメータ div の暗黙的な値が見つかりませんでした: core.common.Divisible[Double]
一方、暗黙的な定義をアプリに移動すると、コンパイルされます。
コンパイラが Divisible のコンパニオン オブジェクトで暗黙的な定義を見つけるのを助けるにはどうすればよいですか?
編集:この質問にはバグがありました。
scala - 別のクラスからコンパニオン クラス変数にアクセスする
私はscalaに本当に慣れていません。クラス外からコンパニオン クラス変数にアクセスしようとしています。クラスのインスタンスを作成せずに、可能な限りこれを行うにはどうすればよいですか。
次の例では、YotascaleCostProcessing クラス内から INTERNAL_COST_REQUESTS にアクセスできます。
別のパッケージの別のクラスから YotascaleCostProcessing.INTERNAL_COST_UPDATES を実行すると、YotascaleCostProcessing のインポートが存在するにもかかわらず、「見つかりません: 値 YotascaleCostProcessing」というエラーが表示されます。これが機能する唯一の方法は、私がこれを行うときです: new YotascaleCostProcessing().YotascaleCostProcessing.INTERNAL_COST_UPDATES
scala - ケースクラスとコンパニオンの異なる順序の暗黙的な解決
通常、最初に a を書きcase class
、次にコンパニオンobject
を同じファイルのすぐ下に書きます。しかし、コンパニオンで宣言されたものをインポートしようとすると、implicit
宣言の順序を切り替える必要があります (もちろん、そうしたくありません)。この状況を克服するために推奨される方法は何ですか?
具体的なケースでは、次のコードは機能しません。
object FooWorker
しかし、それが機能する前に宣言するcase class FooWorker
と。テストには Scala 2.11.6 と SBT を使用しています。どうもありがとう!
scala - コンパニオン オブジェクト ファクトリと new キーワードをいつ使用するか
Scala 標準ライブラリの多くのクラスはapply()
、コンパニオン オブジェクトをファクトリとして使用します。これは、 のような呼び出しを連鎖させる場合に便利List(List(1))
です。一方、new
( new HashMap[Int, Int]()
) を使用して直接オブジェクトを作成することも可能です。
それが標準ライブラリです。さて、私自身のコードでは、コンパニオン ファクトリとオブジェクトの作成のどちらのアプローチを使用するのが良いnew
でしょうか?
コンパニオン オブジェクト ファクトリをいつ作成し、いつnew
キーワードを使用するかについて、規則はありますか?
一方を他方よりも使用する利点は何ですか?