問題タブ [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 - ケース クラス コンパニオンで適用をオーバーライドする方法
これが状況です。ケースクラスを次のように定義したい:
クラスのインスタンスを作成するときに、次のように「s」の値が常に大文字になるようにオブジェクトを定義したいと思います。
ただし、Scala は apply(s: String) メソッドが 2 回定義されていると不平を言っているため、これは機能しません。ケースクラスの構文が自動的に定義することは理解していますが、これを達成できる別の方法はありませんか? パターン マッチングに使用したいので、case クラスに固執したいと思います。
scala - Scala の case クラスの hashCode
Scala'aコンストラクトがフィッティングと実装をcase class
自動的に生成することを読みました。生成されたコードは正確にはどのように見えますか?equals
hashCode
json - scala lift json:未知のデータのパターンマッチ?
変更できない奇妙な json があり、lift で JsonParsen を使用して解析したいと考えています。
典型的なjsonは次のようなものです:
問題は、データのキーが不明であることです (data_xxxxx、xx:s が不明)。これは悪いjsonですが、私はそれと一緒に暮らす必要があります.
ここのキーが不明であるが、構造がわかっている場合、適切な構造を構築できるように、scala でケースクラスをセットアップするにはどうすればよいですか?
scala - Scala の制限付き型パラメータ化ケース クラスとデフォルト引数の問題
以下を考慮してください (Scala 2.8.1 および 2.9.0 でテスト済み):
最後の行は次のように失敗します。
これを変更するとval dogMap = AnimalsMap[Dog](Map())
修正されますが、デフォルトの引数値を利用できなくなります。
リストの対応物が期待どおりに機能するのに、デフォルト値が Map[Nothing,Nothing] と推論されるのはなぜですか? 引数のデフォルト値を使用する AnimalsMap インスタンスを作成する方法はありますmap
か?
編集:私は、より差し迫った 2 番目の質問への回答を受け入れましたが、キーの型Map()
がこれら 2 つのケースで異なって推論される理由を知りたいと思います。
編集2:型の境界は無関係であるようです-ケースクラスへのパラメトリック型は問題を引き起こします:
scala - Scalaでは、ケースクラスのフィールドの名前をプログラムで決定するにはどうすればよいですか?
Scalaで、次のようなケースクラスがあるとします。
ケースクラスのパラメータを説明するSeq[(String, Class[_])]
、またはさらに良い方法を取得する方法はありますか?Seq[(String, Manifest)]
scala - ケース クラスの継承を、Scala での網羅性チェックを維持するエクストラクタに置き換える
ケースクラスを使用して実装されたいくつかの異なるタイプの頂点を持つグラフのような構造を表す単純なクラス階層があります。
これにより、次のようなマッチ ブロックを記述できます。
またはこのように:
この実装には次のプロパティがあることに注意してください。
1) アークと頂点を区別する一致ブロックを記述できますが、特定の頂点タイプを区別するのではなく、頂点タイプを区別する一致ブロックも記述できます。
2) 頂点タイプ固有のマッチ ブロックと非頂点タイプ固有のマッチ ブロックの両方で、パターン マッチングの網羅性がチェックされます。
ただし、ケース クラスからの継承は非推奨であり、コンパイラは代わりにエクストラクタを使用して非リーフ ノードでのマッチングをサポートすることを提案します (つまり、上記の例では、アークと頂点を区別し、頂点タイプを区別しません)。
問題: ケース クラスの継承を使用せずに同様のクラス階層を実装することは可能ですが、上記の両方のユース ケースでコンパイラによってパターンの網羅性チェックが実行されますか?
編集: VertexType クラスにコンストラクター パラメーターを追加して、型に対してのみ一致が実行されないようにしました。
ケースクラスを使用しない現在の実装は次のとおりです。
そしてテストコード:
2 番目のブロック (VertexType2 が一致することはありません) で非網羅的な一致に関する警告が表示されることを期待していますが、それはありません。
実際、2.9.0-RC3 より前の Scala コンパイラでは警告が表示されるはずですが、RC3 以降のバージョン (2.9.0 および 2.9.0-1 を含む) では警告が表示されず、かなり混乱しています。
scala - Scala ケース クラスをデファクト マップとして使用する
これは何よりも設計上の問題です...
私は Scala のケース クラスがとても好きで、頻繁に使用しています。Options
ただし、多くの場合、 (Lift の) でパラメーターをラップし、Boxes
既定値を設定して、柔軟性を確保し、ユーザーがすべてのパラメーターを常に指定するとは限らないことを考慮しています。からこの慣習を採用したと思います。
私の質問は、これは合理的なアプローチですか? すべてがオプションである可能性があることを考えると、多くのボイラープレートとチェックがある可能性がありMap[String, Any]
ますMap
。
実際の例を挙げましょう。ここでは、送金をモデル化しています。
比較的簡単に理解できると思います。この最も単純な例では、次のTransaction
ように宣言できます。
冗長だと思っていることはすでに想像できます。そして、すべてを指定すると:
一方で、Full
どこにでも散らばらなければならないにもかかわらず、いくつかの優れたパターン マッチングを行うことができます。
これは合理的なアプローチですか?を使用したほうがよいでしょうMap
か? または、ケース クラスを別の方法で使用する必要がありますか? ケースクラスの階層全体を使用して、異なる量の情報が指定されたトランザクションを表すのでしょうか?
scala - Scala コンパイラーが copy が私のケースクラスのメンバーではないと言うのはなぜですか?
まず、これは Scala 2.8 にあるので、そこにあるはずです! =)
私はLiftのJavascriptオブジェクトに取り組んでおり、次のものが必要です:
残念ながら、次のコンパイラ エラーが発生します。
ケースクラスにはプロパティがあるので、copy
メソッドがあるはずですよね?
試してみるthis.copy
と、実質的に同じエラーが発生します。
copy
これはなぜですか?また、ケース クラス メソッドでどのように使用できますか? copy
それとも、私のメソッドを宣言した後にコンパイラが追加するアイデアですか?
私はこれを行う必要がありますか?
scala - Scala 2.9 でのケース クラスとプロキシの動作
私たちのコードを Scala 2.9 に移行したところ、動作せず、黙って失敗したコードの大部分が見つかりました。Proxy を拡張するケース クラスが等しくないことを突き止めました。私たちのコードでは、Proxy を直接拡張するのではなく、Proxy を拡張するライブラリ内のクラスを拡張するだけです。
どんな助けでも大歓迎です。
2.8で
2.9で
アップデート
これは Scala 2.9 のバグに過ぎないと思います。それ以外の場合、他のクラスを拡張するケース クラスがある場合は、その基本クラスの階層を調査して、プロキシを拡張していないことを確認する必要があります。コードでこれを行うことはできません。より明白なバグを修正するだけです。これが意図された動作である場合、コンパイラの警告は必須です。それは正しいと思いますか?
アップデート
また、 scala メーリング リストでも議論されています。
アップデート
バグを報告しました
scala - 自家製抽出器とケースクラス抽出器の違い
Scala仕様によると、caseクラスによって構築されるエクストラクターは次のとおりです(scala仕様§5.3.2)。
実装上の理由から、ケース以外のクラスでこのエクストラクターの動作を模倣できるようにしたいと思います。ただし、私の実装では同じ動作を再現できません。
これが私が持っている違いの例です:
次の警告があります:
D
警告はケースでのみ発生し、ケースクラスのテキストアクターのケースでは発生しないことに注意してください。警告の原因/この警告を回避するために私が何をすべきかについて何か考えがありますか?
注: REPLでテストする場合、最も簡単な方法は次のとおりです。
チェックされていない警告をアクティブにするには
scala>:power
scala> settings.unchecked.value = true
上記のコードを貼り付けモードでコピーするには:
scala>:paste
[コピーペースト]
[ctrl + D]
編集: Antorasが言ったように、それはコンパイラのバグであるはずです、多分scalaバージョンが役に立つかもしれません:scala 2.9.0.1(簡単なテストの後、まだscala 2.9.1RC2にあります)