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

scala - ケースクラスでWeakReferenceを使用するScala

他のオブジェクトへのscala.ref.WeakReferenceを保持するcaseクラスをscalaで記述したいと思います。それがscalaで行われるためのベストプラクティスは何だろうか。

私はそれについていくつか考えました、そして最初のものはこれでした:

しかし、scalaはCC1で、強力な参照を保持するrefのvalを自動的に生成するため、これは単純に機能しません。

私の2番目の考えは:

それはうまくいきました。ただし、コードの再利用という点ではあまり友好的ではありません。weakRefgetが次のような基本クラス/トレイトから取得された場合はどうなりますか。

どのようにコードを書きますか?何を提案しますか?前もって感謝します!

0 投票する
4 に答える
5533 参照

parsing - Key=Valueペアの文字列をScalaケースクラスに簡単に解析します

キーと値のペアの文字列を簡単に解析してscalaケースクラスにする方法はありますか?

たとえば、次の文字列から:

の中へ

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

unit-testing - Scala のリフレクション コードが Vector にドリルダウンしない

アプリケーションのこの部分は、JSON との間で解析してオブジェクトに変換します。「PurchaseOrder」を作成し、それを JSON に変換して同じタイプのオブジェクトに戻し、リフレクションを使用して元の PurchaseOrder と最終的な PurchaseOrder の両方が同一であることを確認する単体テストを作成しました。

これはJSONです:

私は特性として定義されたオブジェクトを持っています:

そして、実装は次のとおりです。

今 :) 私の問題は、LineItem に多くのフィールドを追加する必要があることです。コンパイラは、ケース クラスに 22 を超えるパラメータを含めることはできないと不平を言います。そこで、LineItemImpl を次のように書き直しました。

しかし、リフレクション単体テストでエラーが発生しました。

つまり、比較される 2 つのオブジェクトの 2 つの Vector は、内部の要素が異なります。これは、ケース クラスを標準クラスに変更すると、一部のパターン マッチ プロパティが失われ、コンテンツではなくオブジェクト アドレスが比較されるためだと理解しています。

LineItemImpl にいくつかのプロパティまたは注釈を追加して、これを修正する方法はありますか? それとも、リフレクション チェックを変更してベクトルにドリルダウンすることしかできませんか? 理想的には、単体テストを変更したくありません。

ありがとう!

0 投票する
4 に答える
442 参照

class - ケースクラスのインスタンス共有を実装する方法

定義を仮定すると:

潜在的に大量のIntegerWrapperインスタンスi=[0..N>が作成される可能性がある状況にある場合、次のことを行う必要があります。

  1. この範囲をシングルトンの固定セットにマップします[IntegerWrapper(0) .. IntegerWrapper(N)>

  2. クラスの既存の値のセマンティクスを維持するIntegerWrapper(マッチング、イコール、ハッシュコード、シリアライゼーション)

私は何と同じようにインスタンス共有を行うことを目指していますjava.lang.Integer。私の質問は、自分ですべてを行う必要なく、これを実行できるかどうかだと思います。コンパニオン オブジェクトを で定義するだけでapply(i : Int)はコンパイルされません。助言がありますか?

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

scala - Scala-列挙型とケースクラス

LogActorというakkaアクターを作成しました。LogActorsのreceiveメソッドは、他のアクターからのメッセージを処理し、指定されたログレベルにそれらをログに記録します。

私は2つの方法で異なるレベルを区別することができます。最初の1つ:

2番目:(編集

どちらの方法がより効率的ですか?ケースクラスと一致する、または列挙値と一致するのにかかる時間は短くなりますか?

(私はこの質問を読みましたが、実行時の問題に関する回答はありません)

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

scala - Scala ケースクラスを一般的に書き換える

ケースクラスの引数を一般的に置き換えることは可能ですか? より具体的には、「検索」ケース・クラスと「置換」ケース・クラス (文法規則の左側と右側のようなもの)、およびターゲット・ケース・クラスを受け取る代替関数が必要であるとします。検索ケース・クラスの引数を置換ケース・クラスに置き換えた新しいケース・クラス? この関数は、単純にケース クラス (Product?) と、ケース クラスのすべての引数/製品に適用される関数を受け取ることもできます。

明らかに、特定のケース クラスがあれば、unapply と apply を使用できますが、この種の関数を一般的に (任意のケース クラスを指定して) 記述する最善/最も簡単/その他の方法は何ですか?

Scala 2.10 のリフレクション機能または shapeless の Iso.hlist を使用する良い解決策があるかどうか疑問に思っています。

たとえば、私が本当にできるようにしたいのは、次のようなクラスが与えられた場合です...

... 任意のケース クラスを取り、From 型の要素を To 型のインスタンスに置き換えたコピーを返すことができる関数があります。

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

scala - デフォルトのパラメーターを使用してケースクラスのscalaエクストラクターを作成するにはどうすればよいですか?

デフォルトのパラメーターを持つ次のcaseクラスがあり、最初の2つのパラメーターを抽出できるようにunapplyメソッドを作成する方法を考えています。

以下のコードが明確であることを願っています。

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

class - Scala: 子クラスからコンパニオン オブジェクトを参照する

次の Scala クラスのレイアウトを考えています。私はアイテムを表す基本的な特性を持っています - 名前、重量を照会し、次のようなメソッドを呼び出すことによっていくつかのオブジェクト固有のことを行うことができる不変オブジェクトであるべきもののインターフェースですequip:

ケースクラスを手動で作成して実装を作成できますItemが、ある種の「辞書」ベースのアイテムが必要です-つまり、静的マップは型IDから値へのマッピングを保持しnameweightメソッドは格納された型で辞書を照会するだけですID:

ここまでは順調ですね。Weapon(1)「ショート ソード」のアイテム オブジェクトを参照するために使用できます。Armorただし、まったく同じ実装を使用するnameweight、完全に異なるequip他の抽象メソッド実装を使用するなどの他の項目タイプにも同じ基本原則が適用されます。次に例を示します。

にかなり似てWeaponいますね。共通のパターン (つまり、コンパニオン オブジェクト ディクショナリと共通のtyp値でのルックアップの実装) を次のように除外したいと思います。

しかしWeapon.NameDict、親クラスから子のコンパニオン オブジェクト ( など) を参照するには???.NameDict(typ)どうすればよいですか? そのような問題に対するより良い、より Scala 風のアプローチはありますか?

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

scala - Scalaでクラスパラメータと同じ名前のフィールドを取得するにはどうすればよいですか?

次のような簡単なクラスを受講してください。

さて、このクラスをインスタンス化するとき、私は通常、そのユーザーがとを使用できるようにしたいnameですage。好き:

もちろん、これは、と呼ばれるゲッターを定義するか、ケースクラスnameを作成しない限り機能しません。後者は簡単な解決策ですが、私はケースクラスを悪用しているような気がしますか?Person

それでも前者は私が単純にできないので少し不便です:

したがって、nameクラスのコンストラクターの最初の名前を、personNameまたは_nameまたはなどの他の名前に変更する必要がありnます。しかし、それは一種の混乱を招き、私の目にははるかにエレガントではありません。それは同じ概念/変数/値なので、まったく同じ名前にする必要がありますよね?

それで...ここでの最良または正しい実践は何ですか?それを追加するのはとても魅力的ですcase

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

mongodb - Java Bean および Scala ケース クラスを MongoDB オブジェクトにマッピングする

私は現在、ここでこの問題に苦労しています..

私たちのシステムでは、Java Bean Scala ケース クラスを使用しており、これらは互いに含まれていることがよくあります。したがって、これらのオブジェクトをmongoObjectsにマップする方法の良い解決策を探しているので、データベースから保存/ロードできます。

このために、私はMorphiaを試しましたが、残念ながら、ケース クラスを構築できないため、json からオブジェクトにシリアル化されません。

だから私はSalatを試しましたが、これはケースクラスでのみ機能し、Java Bean では機能しません:(

これを行う方法について誰か考えがありますか?