問題タブ [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 に答える
338 参照

scala - Scala クラスとコンパニオン オブジェクトで重複する型エイリアスを避ける

私は Scala の初心者で、クラスとコンパニオン オブジェクトを含む Scala プログラムを持っており、使用される型エイリアスを使用したいと考えています。

  1. クラスのメソッドを定義します。
  2. また、クラス外でエイリアスを使用したい。そのためには、コンパニオン オブジェクトでエイリアスを定義し、コンパニオン オブジェクトからエイリアスをインポートすると便利です。また、コンパニオン オブジェクトでいくつかの Implicit を定義しているので、これは当然のことです。

具体的なコードはhttps://github.com/juanrh/Surus/blob/1cfd55ed49c4d1b22e53babe07bcf44fd74e3072/src/main/scala/org/surus/spark/SurusRDDFunctions.scalaで入手できます。型エイリアスは PMMLPrediction で、クラスは SurusRDDFunctions です。現在、コードは機能しますが、クラスとコンパニオンの両方でエイリアスを定義しましたが、これはあまり良くありません。クラス内のエイリアスの定義を削除すると、クラスはそれを見つけることができなくなります。これは奇妙に思えます。だから私はおそらく何か間違ったことをしていると思います、何かアイデアはありますか?

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

ご挨拶、

ファン

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

scala - 他の型クラスからの暗黙の def 型クラス

暗黙の Fractional または Integral 型クラスを既に持っているすべての型 T に対して、新しい暗黙の型クラス Divisible を追加したいと考えています。

私が書いたコードはコンパイルされません:

私が受け取っているエラーは次のとおりです。

パラメータ div の暗黙的な値が見つかりませんでした: core.common.Divisible[Double]

一方、暗黙的な定義をアプリに移動すると、コンパイルされます。

コンパイラが Divisible のコンパニオン オブジェクトで暗黙的な定義を見つけるのを助けるにはどうすればよいですか?

編集:この質問にはバグがありました。

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

scala - 別のクラスからコンパニオン クラス変数にアクセスする

私はscalaに本当に慣れていません。クラス外からコンパニオン クラス変数にアクセスしようとしています。クラスのインスタンスを作成せずに、可能な限りこれを行うにはどうすればよいですか。

次の例では、YotascaleCostProcessing クラス内から INTERNAL_COST_REQUESTS にアクセスできます。

別のパッケージの別のクラスから YotascaleCostProcessing.INTERNAL_COST_UPDATES を実行すると、YotascaleCostProcessing のインポートが存在するにもかかわらず、「見つかりません: 値 YotascaleCostProcessing」というエラーが表示されます。これが機能する唯一の方法は、私がこれを行うときです: new YotascaleCostProcessing().YotascaleCostProcessing.INTERNAL_COST_UPDATES

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

scala - ケースクラスとコンパニオンの異なる順序の暗黙的な解決

通常、最初に a を書きcase class、次にコンパニオンobjectを同じファイルのすぐ下に書きます。しかし、コンパニオンで宣言されたものをインポートしようとすると、implicit宣言の順序を切り替える必要があります (もちろん、そうしたくありません)。この状況を克服するために推奨される方法は何ですか?

具体的なケースでは、次のコードは機能しません。

object FooWorkerしかし、それが機能する前に宣言するcase class FooWorkerと。テストには Scala 2.11.6 と SBT を使用しています。どうもありがとう!

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

scala - コンパニオン オブジェクト ファクトリと new キーワードをいつ使用するか

Scala 標準ライブラリの多くのクラスはapply()、コンパニオン オブジェクトをファクトリとして使用します。これは、 のような呼び出しを連鎖させる場合に便利List(List(1))です。一方、new( new HashMap[Int, Int]()) を使用して直接オブジェクトを作成することも可能です。

それが標準ライブラリです。さて、私自身のコードでは、コンパニオン ファクトリとオブジェクトの作成のどちらのアプローチを使用するのが良いnewでしょうか?

コンパニオン オブジェクト ファクトリをいつ作成し、いつnewキーワードを使用するかについて、規則はありますか?

一方を他方よりも使用する利点は何ですか?