問題タブ [case-class]

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 に答える
878 参照

scala - ケースクラスによる双方向参照

ケースクラスに双方向ツリーを実装することは可能ですか? これは簡単なように思えますが、私は困惑しています

子を追加したい (そして新しいルートを取得したい) -- 次のようなもの

しかし、子の「親」は、子を子としてリストするノードを参照しなくなるため、これは機能しません。不変リストとケースクラスでこれは可能ですか?

以下の回答に基づいて

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

scala - ケースクラスでコンストラクターを使用できますか?

Stuff私は、トレイトを拡張することによって実行時に匿名のサブクラスを作成できるようにしたいケースクラス(名前を付けましょう)を持っています(それを呼び出しますMarker)。これは、私がやろうとしていることを示す REPL セッションのスニペットです。

aを使用してインスタンス化する方法に注意してくださいStuff.apply()。一方、bの場合は、ケース クラスのコンストラクターを呼び出しています。

私の質問は、コンストラクタコーシャを使用してケースクラスをインスタンス化していますか? ==.equals()、、 などのケース クラスによって提供される通常の利便性はすべて機能するため、そのように思われます.hashCode()。私がやっていることをBad Thing (TM)としてブランド化する何かが欠けていますか?

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

scala - Scalaの特性/ケーキパターンとケースクラス

私のWebアプリケーションでは、許可されたユーザーには少なくとも4つの「ファセット」があります。httpセッション関連データ、永続データ、Facebookデータ、ランタイムビジネスデータです。

少なくとも2つの理由から、トレイトではなくケースクラスの構成を使用することにしました。

  • 特性の混合は名前の衝突を引き起こす可能性があります
  • パターンマッチングやコピーメソッドなどのフリーケースクラスのグッズが欲しい

このテーマに関する経験豊富なスカラリストの意見を知りたいです。特性やケーキのパターンはそのようなタスクに適しているように見えますが、前述のように問題があります...迅速かつ簡単に実装するだけでなく、使用するために深く理解したいことは明らかです将来は。

それで、私の決定には欠陥や誤解がありますか、それとも正しいですか?関連するコードは次のようになります。

0 投票する
7 に答える
25323 参照

scala - ネストされた構造を更新するためのよりクリーンな方法

次の2つのcase classesがあるとします。

および次のPersonクラスのインスタンス:

を更新したい場合zipCodeは、次のrajことを行う必要があります。

ネストのレベルが高くなると、これはさらに醜くなります。update-inそのようなネストされた構造を更新するためのよりクリーンな方法(Clojureのようなもの)はありますか?

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

reflection - ケースクラスの「productElement(i)」はリフレクションを使用しますか?

次の Scala スニペットを検討してください。

ここでの呼び出しはinspect()、リフレクションが (何らかの方法で) 使用されることを意味しますか?

ケースクラスのフィールドを明示的に参照しなくても、何らかの方法でアクセスできるようにしfoo.v1たいと考えています。

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

serialization - ケースオブジェクトはシリアライズ可能で、ケースクラスはシリアライズできないのはなぜですか?

この例http://scala.sygneca.com/code/remoteactorsで遊んで、リモート アクターが Scala (2.8.0) でどのように機能するかを学びます。特に、アクターによって送信されるメッセージが次のように定義される方法を少し変更しました。

すべてが期待どおりに機能します。残念ながら、イベントをケース オブジェクトではなくケース クラスとして定義すると、次のようになります。

私の例は動作を停止します。より詳細には、ケース オブジェクトは直列化可能ですが、ケース クラスは直列化できないようです。実際、この最後の変更で例を実行しようとすると、次の例外が発生します。

ケース オブジェクトをシリアライズ可能にできるのに、ケース クラスをシリアライズできない理由はありますか? 私の例をケースクラスで動作させる方法はありますか?

編集:ビクターが提案し、アーロンが確認したように、クラスではなくメッセージとしてコンパニオンオブジェクトを送信しています。さらに、コンパイルされたコードを javap で調べると、クラスがシリアライズ可能であることが明らかです。

コンパニオン オブジェクトは次のとおりではありません。

問題は、コンパニオン オブジェクトの代わりにクラスを使用するように指定するにはどうすればよいかということです。次のように、アーロンが提案したようにメッセージを送信するときに、空の括弧も追加しました。

しかし、何も変更されていません。最後に、ケースクラスに偽のパラメーターも追加しました

次のようにメッセージを送信します。

しかし、まだ何の違いも経験していません。なにか提案を?

0 投票する
5 に答える
21816 参照

scala - Scala ケースクラスを宣言することの欠点は何ですか?

多くの美しく不変のデータ構造を使用するコードを作成している場合、ケース クラスは天の恵みのように見えます。1 つのキーワードだけで、次のすべてを無料で提供します。

  • デフォルトですべて不変
  • 自動的に定義されるゲッター
  • 適切な toString() 実装
  • 準拠する equals() および hashCode()
  • マッチングのための unapply() メソッドを持つコンパニオン オブジェクト

しかし、不変データ構造をケース クラスとして定義することの欠点は何でしょうか?

クラスまたはそのクライアントにどのような制限を課しますか?

非ケース クラスを使用する必要がある状況はありますか?

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

scala - Scalaのキーとしてケースクラスを使用した効率的なマップ?

次のCコードは、列挙型と配列を列挙型から任意のものへの効率的な「マップ」として使用します。

これはScalaで可能ですか?
つまり、ケースクラスから何かへの「マップ」を作成し、ツリーやハッシュマップとしてではなく、効率的な配列として実装します。ただし、Intではなく特定のタイプでのみインデックスを作成できるようにしたいと思います。

更新:要するに、Scala配列をある種の列挙型(ケースクラスまたは列挙型)でインデックス付けしたいと思います。

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

scala - 特性のケースクラスのメソッドに依存する

トレイトのcaseクラスで定義されたメソッドに依存する方法はありますか?例:コピー:以下は機能しません。理由はわかりませんが。

与える:

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

scala - Scalaのネストされた型のパターンマッチング

私はScalaで効果的に列挙型である何かを実装しようとしています。コンパイラが非網羅的なパターンの一致を検出できるように、caseクラスを使用してこれを実行したいと思います。

これは、非常に基本的な形式で正常に機能します。例:

ただし、ケースオブジェクトの名前が簡単に衝突する可能性があるため、これは理想的ではありません。

明らかな解決策は、ケースオブジェクトを別々の名前空間に配置することです。

しかし、マッチブロックでそれらのクラスを参照する方法は?

Javaスタイルのドットで参照することはできません。

「#」記号も機能していないようです。

また、このフォームも機能しません。

この場合、「左」は型ではなくインスタンスであるため、これは理にかなっています。型を参照する簡単な方法があると思います。それを達成するために私が得ることができる最も近いものはこれです:

}

しかし、これによりマッチブロックのコンパイルは正常になりますが、実際にこれらのオブジェクトを参照する方法を見つけることができませんでした。たとえば、この「列挙」のメンバーを関数に渡すことができませんでした。これは、Horizo​​ntalAlignmentが型であり、オブジェクトではないため、フィールドアクセスを使用してネストされたオブジェクトの1つを参照することができないためです。一方、これらのオブジェクトは型ではないため、 「#」記号。

クラスの外部からクラスにネストされたオブジェクトを参照する方法はありますか?

編集

これまでのところ、パッケージオブジェクトがこの問題を解決するための最良の方法であることがわかりました。

}

ただし、上記の質問(クラス内のネストされたオブジェクトへのアクセス)は引き続き有効です。