問題タブ [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: コンパニオン オブジェクトとケース クラスの定義の順序
Scala 2.9.1 では、次の動作が得られます。
コンパイラは次のように不平を言いObject Z
ます: エラー: Z は既に (コンパイラによって生成された) ケース クラス コンパニオン オブジェクト Z として定義されています
関数定義内にある場合、ケース クラス定義の後にケース クラスのコンパニオン オブジェクトを定義することは許可されていないようです。これはコンパイラのバグですか、それとも意図的なものですか? 後者の場合、なぜですか?
scala - Consed ケース クラスを自動的にハッシュする
ケースクラスと同じように動作するクラスを持つ方法を探していますが、それは自動的にconsed をハッシュします。
整数リストでこれを実現する 1 つの方法は次のとおりです。
そして、例えば、
我々が得る
今私が探しているのは、これを達成するための一般的な方法です(または非常に似たものです)。理想的には、次のように入力する必要はありません。
(または類似)。誰かが私を助けるために型システムブードゥーを考え出すことができますか、それともマクロ言語が利用可能になるまで待つ必要がありますか?
scala - Scala:ケースクラスの適用解除と手動実装および型消去
私は、Scalaが型消去警告の影響を受けないようにするケースクラスで何をするのかを理解しようとしています。
次のような単純なクラス構造があるとします。それは基本的にEither
:
そして、あなたはそれをこのように使おうとしています:
すべてが問題なくコンパイルおよび実行されます。ただし、unapply
自分でメソッドを実装しようとすると、コンパイラーは警告をスローします。Main
上記と同じクラスで次のクラス構造を使用しました。
フラグを使用してコンパイルすると-unchecked
、次の警告が発行されます。
今、私は型消去を理解し、警告を回避しようとしましたManifests
(これまでのところ役に立たない)が、2つの実装の違いは何ですか?ケースクラスは、追加する必要があることを実行していますか?これは回避できますManifests
か?
-Xprint:typer
フラグをオンにした状態でscalaコンパイラーを介してcaseクラスの実装を実行しようとしましたが、unapply
メソッドは予想どおりに見えます。
scala - Scalaの子ケースクラスのパラメーター名が親ケースクラスのパラメーター名と競合しています
次の2つのクラスがあると仮定します。
それらを両方のケースクラスにすると、両方の使用場所でエラーが発生しました。これは、親クラスの値をオーバーライドする修飾子がparam
必要であることを示しています。override
これは私には奇妙に見えます..なぜここで他のパラメータ名を発明しなければならないのですか..なぜこの順序が強制されるのですか?利益はどこにありますか?
scala - Scalaでオプションで満たされたケースクラスを分解するにはどうすればよいですか?
私はScalaに非常に慣れておらず、構文とスタイルに慣れようとしているので、これはおそらく非常に単純な質問です。
次のようなオプションが設定されたケースクラスがたくさんあるコードベースで作業しています。
上記の例では、彼らが実際にズボンを着用している場合、ポケット付きで、お金がある場合、どのようにお金を返すPerson
のですか?Pants
Pocket
scala - Scala ケース クラス ツリーのノードを変更する
ケースクラスを使用して構築されたツリーがあるとします。
そして今、あるIDを持つノードを別のノードに変更するメソッドを構築したいと考えています。このノードを見つけるのは簡単ですが、変更方法がわかりません。それを行う簡単な方法はありますか?
scala - ケースクラスの抽象化
私はScalaでケースクラスを抽象化する方法を模索しています。たとえば、これはEither[Int, String]
(Scala 2.10.0-M1とを使用して-Yvirtpatmat
)次の試みです。
この定義を考えると、私はそのようなものを書くことができます:
これがモジュールの最初の実装です。ここで、の表現Either
はString
:です。
はunapply
、Left
をRight
本当に排他的にするので、以下は期待どおりに機能します。
ここまでは順調ですね。私の2番目の試みは、次scala.Either[Int, String]
の自然な実装として使用することModule.EitherIntOrString
です。
しかし、これは期待どおりに機能しません。
正しい結果を得る方法はありますか?
scala - パラメータが反変の位置にあるのはなぜですか?
トレイト内で共変型パラメーターを使用して、次のようなケースクラスを構築しようとしています:
コンパイラは次のように述べています。
次に、次のことを試しましたが、うまくいきませんでした。
今回のエラーは次のとおりです。
ここでTが共変の位置にある理由を誰かが説明し、この問題の解決策を提案できますか? どうも!
scala - Scala - コンパニオン オブジェクトをブロックを受け入れる関数への省略形の引数として使用する
モデル オブジェクトのセットとラッパー オブジェクトのセットを用意して、追加機能を提供します。
モデル オブジェクトのコレクションをラッパー オブジェクトに簡潔に変換できるようにしたいと考えていますList("x", "y", "z").foreach(println)
。
そのModelWrapper
ため、引数として渡された はModelWrapper(_)
、コンパニオン オブジェクトの呼び出しである に変換されます。
ただし、これを試すと、次のようなタイプの不一致エラーが発生します。
ただし、 を作成ModelWrapper
しcase class
てコンパニオン オブジェクトを削除すると、機能します。追加する動作が、ケース クラスが機能する全体的な方法にうまく適合しないため、ケース クラスにしたくありません。たとえば、パラメーターとして同じモデル クラスを持つ 2 つのラッパー クラスは、必ずしも等しいとは限りません。
私が知りたいのは、この場合のケース クラスとコンパニオン オブジェクトの違いは何ですか? ケースクラスを使わずに欲しいものを手に入れることはできますか?
scala - ケースクラスと形質の線形化
Stepper
ケースクラスを次のように書きたいとします。
toString
素敵な実装が付属しています:
しかし、それは実際には関数ではありません:
Function
回避策は、特性を実装することです...
しかし、私はもう素敵な toString 実装を無料で手に入れることはできません:
次に、問題は、これら 2 つの世界の最高のものを手に入れることができるかということです。toString
無料で素敵な実装があり、 trait の実装がある解決策はありますかFunction
。言い換えれば、case class
最終的に構文糖が適用されるような方法で線形化を適用する方法はありますか?