問題タブ [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.
scala - ケースクラスによる双方向参照
ケースクラスに双方向ツリーを実装することは可能ですか? これは簡単なように思えますが、私は困惑しています
子を追加したい (そして新しいルートを取得したい) -- 次のようなもの
しかし、子の「親」は、子を子としてリストするノードを参照しなくなるため、これは機能しません。不変リストとケースクラスでこれは可能ですか?
以下の回答に基づいて
scala - ケースクラスでコンストラクターを使用できますか?
Stuff
私は、トレイトを拡張することによって実行時に匿名のサブクラスを作成できるようにしたいケースクラス(名前を付けましょう)を持っています(それを呼び出しますMarker
)。これは、私がやろうとしていることを示す REPL セッションのスニペットです。
a
を使用してインスタンス化する方法に注意してくださいStuff.apply()
。一方、b
の場合は、ケース クラスのコンストラクターを呼び出しています。
私の質問は、コンストラクタコーシャを使用してケースクラスをインスタンス化していますか? ==
、.equals()
、、 などのケース クラスによって提供される通常の利便性はすべて機能するため、そのように思われます.hashCode()
。私がやっていることをBad Thing (TM)としてブランド化する何かが欠けていますか?
scala - Scalaの特性/ケーキパターンとケースクラス
私のWebアプリケーションでは、許可されたユーザーには少なくとも4つの「ファセット」があります。httpセッション関連データ、永続データ、Facebookデータ、ランタイムビジネスデータです。
少なくとも2つの理由から、トレイトではなくケースクラスの構成を使用することにしました。
- 特性の混合は名前の衝突を引き起こす可能性があります
- パターンマッチングやコピーメソッドなどのフリーケースクラスのグッズが欲しい
このテーマに関する経験豊富なスカラリストの意見を知りたいです。特性やケーキのパターンはそのようなタスクに適しているように見えますが、前述のように問題があります...迅速かつ簡単に実装するだけでなく、使用するために深く理解したいことは明らかです将来は。
それで、私の決定には欠陥や誤解がありますか、それとも正しいですか?関連するコードは次のようになります。
scala - ネストされた構造を更新するためのよりクリーンな方法
次の2つのcase class
esがあるとします。
および次のPerson
クラスのインスタンス:
を更新したい場合zipCode
は、次のraj
ことを行う必要があります。
ネストのレベルが高くなると、これはさらに醜くなります。update-in
そのようなネストされた構造を更新するためのよりクリーンな方法(Clojureのようなもの)はありますか?
reflection - ケースクラスの「productElement(i)」はリフレクションを使用しますか?
次の Scala スニペットを検討してください。
ここでの呼び出しはinspect()
、リフレクションが (何らかの方法で) 使用されることを意味しますか?
ケースクラスのフィールドを明示的に参照しなくても、何らかの方法でアクセスできるようにしfoo.v1
たいと考えています。
serialization - ケースオブジェクトはシリアライズ可能で、ケースクラスはシリアライズできないのはなぜですか?
この例http://scala.sygneca.com/code/remoteactorsで遊んで、リモート アクターが Scala (2.8.0) でどのように機能するかを学びます。特に、アクターによって送信されるメッセージが次のように定義される方法を少し変更しました。
すべてが期待どおりに機能します。残念ながら、イベントをケース オブジェクトではなくケース クラスとして定義すると、次のようになります。
私の例は動作を停止します。より詳細には、ケース オブジェクトは直列化可能ですが、ケース クラスは直列化できないようです。実際、この最後の変更で例を実行しようとすると、次の例外が発生します。
ケース オブジェクトをシリアライズ可能にできるのに、ケース クラスをシリアライズできない理由はありますか? 私の例をケースクラスで動作させる方法はありますか?
編集:ビクターが提案し、アーロンが確認したように、クラスではなくメッセージとしてコンパニオンオブジェクトを送信しています。さらに、コンパイルされたコードを javap で調べると、クラスがシリアライズ可能であることが明らかです。
コンパニオン オブジェクトは次のとおりではありません。
問題は、コンパニオン オブジェクトの代わりにクラスを使用するように指定するにはどうすればよいかということです。次のように、アーロンが提案したようにメッセージを送信するときに、空の括弧も追加しました。
しかし、何も変更されていません。最後に、ケースクラスに偽のパラメーターも追加しました
次のようにメッセージを送信します。
しかし、まだ何の違いも経験していません。なにか提案を?
scala - Scala ケースクラスを宣言することの欠点は何ですか?
多くの美しく不変のデータ構造を使用するコードを作成している場合、ケース クラスは天の恵みのように見えます。1 つのキーワードだけで、次のすべてを無料で提供します。
- デフォルトですべて不変
- 自動的に定義されるゲッター
- 適切な toString() 実装
- 準拠する equals() および hashCode()
- マッチングのための unapply() メソッドを持つコンパニオン オブジェクト
しかし、不変データ構造をケース クラスとして定義することの欠点は何でしょうか?
クラスまたはそのクライアントにどのような制限を課しますか?
非ケース クラスを使用する必要がある状況はありますか?
scala - Scalaのキーとしてケースクラスを使用した効率的なマップ?
次のCコードは、列挙型と配列を列挙型から任意のものへの効率的な「マップ」として使用します。
これはScalaで可能ですか?
つまり、ケースクラスから何かへの「マップ」を作成し、ツリーやハッシュマップとしてではなく、効率的な配列として実装します。ただし、Intではなく特定のタイプでのみインデックスを作成できるようにしたいと思います。
更新:要するに、Scala配列をある種の列挙型(ケースクラスまたは列挙型)でインデックス付けしたいと思います。
scala - 特性のケースクラスのメソッドに依存する
トレイトのcaseクラスで定義されたメソッドに依存する方法はありますか?例:コピー:以下は機能しません。理由はわかりませんが。
与える:
scala - Scalaのネストされた型のパターンマッチング
私はScalaで効果的に列挙型である何かを実装しようとしています。コンパイラが非網羅的なパターンの一致を検出できるように、caseクラスを使用してこれを実行したいと思います。
これは、非常に基本的な形式で正常に機能します。例:
ただし、ケースオブジェクトの名前が簡単に衝突する可能性があるため、これは理想的ではありません。
明らかな解決策は、ケースオブジェクトを別々の名前空間に配置することです。
しかし、マッチブロックでそれらのクラスを参照する方法は?
Javaスタイルのドットで参照することはできません。
「#」記号も機能していないようです。
また、このフォームも機能しません。
この場合、「左」は型ではなくインスタンスであるため、これは理にかなっています。型を参照する簡単な方法があると思います。それを達成するために私が得ることができる最も近いものはこれです:
}
しかし、これによりマッチブロックのコンパイルは正常になりますが、実際にこれらのオブジェクトを参照する方法を見つけることができませんでした。たとえば、この「列挙」のメンバーを関数に渡すことができませんでした。これは、HorizontalAlignmentが型であり、オブジェクトではないため、フィールドアクセスを使用してネストされたオブジェクトの1つを参照することができないためです。一方、これらのオブジェクトは型ではないため、 「#」記号。
クラスの外部からクラスにネストされたオブジェクトを参照する方法はありますか?
編集
これまでのところ、パッケージオブジェクトがこの問題を解決するための最良の方法であることがわかりました。
}
ただし、上記の質問(クラス内のネストされたオブジェクトへのアクセス)は引き続き有効です。