問題タブ [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 投票する
2 に答える
3264 参照

scala - プライベートクラスのコンパニオンオブジェクト:なぜそれは有効ではないのですか?

お互いにプライベートにアクセスできる2つのインスタンスが必要でした。私は当然、そのコンパニオンクラスの唯一のインスタンスへのアクセスを許可するコンパニオンオブジェクトについて考えました。クラス自体をプライベートにしたので、ユーザーはを使用してインスタンスを作成することはできませんnew

このコードはコンパイルされません。私は次のようになります。クラスAは、タイプAのエラーの一部として、その定義スコープをエスケープしますが、これは私にはよくわかりません。私の現在の回避策は、クラスが持つべきすべてのメソッド宣言でトレイトを定義し、class Aそのトレイトを拡張することでしたが、 dualはトレイトタイプであり、タイプではありませんclass A

私がここで見逃している理論上の問題は何ですか?なぜこれが禁じられているのですか?

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

scala - ユーザー定義の上位種類の型を拡張する

私は、scala でより高い種類の型のユーザー定義のエイリアスを持っています。

私もそのタイプの値を持っています:

読み取り可能なコードを書くには、(たとえば)次のようなメソッドを定義したいと思います

FutureOfLastError のインスタンスを Future[String] にマップし、次のように呼び出します

これどうやってするの?それは可能ですか?ケースクラスでのカプセル化はすでに試しましたが、あらゆる種類の暗黙的な変換が頭に浮かびました。

私のお気に入りの選択肢は型エイリアスのコンパニオン オブジェクトですが、コンパニオン オブジェクトから特性 Future (map など) のメソッドを呼び出すことができないため、機能させることができませんでした。

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

scala - 関連クラスのスーパートレイトによってバインドされたリスト内のコンパニオンオブジェクト

ジェネリックスを使用してバインドされたリストにコンパニオンオブジェクトを格納することにより、コンパニオンオブジェクトの「レジストリ」をまとめようとしています。

例が最適です:

FooLookup"defallFoos"で報告されたエラーは

  • 型の不一致; 見つかった:A.typeが必要:Foo.type

HasFoos.allFoosはどのように見える必要がありますか、あるいは、List(A、B、C)はどのように見える必要がありますか。

私も試しdef allFoos: List[ _ <: Foo]ました。ただし、エラーも発生します。クラスではなく「コンパニオンオブジェクト」を使用したいのですが、その周りにもっと一般的な砂糖の粉が必要だと確信していますが、何が必要かはわかりません。

前もって感謝します。

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

java - 可変状態のScalaシングルトンオブジェクトは、サーブレットコンテナ環境のJava静的オブジェクトと同じ動作をしますか?

この質問の言い回しが正確にわからない。Javaでは、静的インスタンス変数があり、所有するクラスがtomcat/classesまたはtomcat/libにあり、多くの異なるWebアプリ(tomcatクラスローダーの子)がそれを使用できる場合、1つのWebアプリで静的変数を変更すると影響があります他人。

これはScalaコンパニオンオブジェクトにも当てはまりますか?私が内部で理解していることから、Scalaシングルトンオブジェクトは、静的変数によって参照されるコンパイラー作成のシングルトンJavaクラスです。したがって、答えは「はい」になります。WebアプリAが新しいscalaFooを作成し、WebアプリBが新しいscala Fooを作成し、Fooクラスが親クラスローダーからのものである場合、各Webアプリには独自のFooインスタンスがありますが、実際にはFooのコンパニオンオブジェクトのインスタンスは1つだけです。

ここで何かが足りませんか?

洞察を事前に感謝します。

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

oop - 関連するフィールドをコンパニオン オブジェクト/クラスにカプセル化し、重複を避ける

私のアプリケーションは、プロパティ ファイルを使用して複数のプロパティをロードします。

アプリケーションのすべてのインスタンスには、環境に関連する 3 つのパラメーターがあります。そのうちの 1 つはプロパティで、残りの 2 つはそれに基づいて計算されます。

3 つの環境* プロパティは何らかの方法でカプセル化する必要があるように思えます。

Discriminator3 つの (今のところ) 環境タイプを区別するために使用されるため、私はこの抽象化を seeked と呼びました。1 つの実行中のアプリケーションでは、そのような environment* プロパティのセットが 1 つしかないため、次のように実装しましたobject

私は呼び出すことができます: environment.Discriminator.urlPrefix、これは問題ありませんが、どうすればコードを改善できますか? 重複を取り除くにはどうすればよいmatchですか? これで、との値が一緒に存在する必要
があるように感じられます(for などの値と同様に) - Discriminator クラスの 1 つのインスタンスの一部のようなものです。tokenurlPrefixlivestaging

私はまだ を使いたいのでenvironment.Discriminator.urlPrefixDiscriminator(現在の) コンパニオン オブジェクトが必要です。

しかし、私はここで立ち往生しています - 概念を組み合わせる方法がわかりません。

flag具体的なフィールドに基づいて、Discriminator の 3 つのインスタンスを自分で作成する必要があることは明らかですが、どうすればよいでしょうか。コンストラクターを呼び出すにはどうすればよいですか? 最初のパラメーターに基づいて最後の 2 つのパラメーターを渡します (これはすべてのインスタンスに共通です)。

これを取得したら、3 つのインスタンスを Discriminator コンパニオン オブジェクトに接続して、 を使用できるようにするにはどうすればよいenvironment.Discriminator.urlPrefixでしょうか?

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

scala - scala のファクトリとしてのコンパニオン オブジェクト

私は Scala を使い始めたばかりで、いくつかのチュートリアルに取り組んでいます。コンパニオン オブジェクトに出会い、それらをファクトリとして使用しました。私はいくつかのことを試しました。ただし、次のものが適切に機能していません。それについて私の頭を理解することはできません..

メソッドで定義したように、2つの整数ポイントを合計しようとしているだけです...誰かが私が間違っていることを知っていますか??

編集:次の(作業中の)クラスをファクトリにラップしようとしていました。

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

scala - scala タイプのマクロを使用して、ケース クラスからコンパニオン オブジェクトにアクセスする (またはその逆)

ケース クラスのフィールドに基づいて、コンパニオン オブジェクトに値を作成しようとしています。

私はこのようなことをしたいと思います:

これを追加して、コンパニオン オブジェクトに値を追加したいと思います...

コンパニオン オブジェクトとクラスは相互にアクセスできるため、ケース クラス タイプ マクロ内からコンパニオン オブジェクトにアクセスすることでこれを達成できるのではないでしょうか?

また...オブジェクトAが定義されているかどうかに関係なく、「val c」を追加したいと思います。