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

scala - Scala: コンパニオン オブジェクトとケース クラスの定義の順序

Scala 2.9.1 では、次の動作が得られます。

コンパイラは次のように不平を言いObject Zます: エラー: Z は既に (コンパイラによって生成された) ケース クラス コンパニオン オブジェクト Z として定義されています

関数定義内にある場合、ケース クラス定義の後にケース クラスのコンパニオン オブジェクトを定義することは許可されていないようです。これはコンパイラのバグですか、それとも意図的なものですか? 後者の場合、なぜですか?

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

scala - Consed ケース クラスを自動的にハッシュする

ケースクラスと同じように動作するクラスを持つ方法を探していますが、それは自動的にconsed をハッシュします

整数リストでこれを実現する 1 つの方法は次のとおりです。

そして、例えば、

我々が得る

今私が探しているのは、これを達成するための一般的な方法です(または非常に似たものです)。理想的には、次のように入力する必要はありません。

(または類似)。誰かが私を助けるために型システムブードゥーを考え出すことができますか、それともマクロ言語が利用可能になるまで待つ必要がありますか?

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

scala - Scala:ケースクラスの適用解除と手動実装および型消去

私は、Scalaが型消去警告の影響を受けないようにするケースクラスで何をするのかを理解しようとしています。

次のような単純なクラス構造があるとします。それは基本的にEither

そして、あなたはそれをこのように使おうとしています:

すべてが問題なくコンパイルおよび実行されます。ただし、unapply自分でメソッドを実装しようとすると、コンパイラーは警告をスローします。Main上記と同じクラスで次のクラス構造を使用しました。

フラグを使用してコンパイルすると-unchecked、次の警告が発行されます。

今、私は型消去を理解し、警告を回避しようとしましたManifests(これまでのところ役に立たない)が、2つの実装の違いは何ですか?ケースクラスは、追加する必要があることを実行していますか?これは回避できますManifestsか?

-Xprint:typerフラグをオンにした状態でscalaコンパイラーを介してcaseクラスの実装を実行しようとしましたが、unapplyメソッドは予想どおりに見えます。

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

scala - Scalaの子ケースクラスのパラメーター名が親ケースクラスのパラメーター名と競合しています

次の2つのクラスがあると仮定します。

それらを両方のケースクラスにすると、両方の使用場所でエラーが発生しました。これは、親クラスの値をオーバーライドする修飾子がparam必要であることを示しています。overrideこれは私には奇妙に見えます..なぜここで他のパラメータ名を発明しなければならないのですか..なぜこの順序が強制されるのですか?利益はどこにありますか?

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

scala - Scalaでオプションで満たされたケースクラスを分解するにはどうすればよいですか?

私はScalaに非常に慣れておらず、構文とスタイルに慣れようとしているので、これはおそらく非常に単純な質問です。

次のようなオプションが設定されたケースクラスがたくさんあるコードベースで作業しています。

上記の例では、彼らが実際にズボンを着用している場合、ポケット付きで、お金がある場合、どのようにお金を返すPersonのですか?Pants Pocket

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

scala - Scala ケース クラス ツリーのノードを変更する

ケースクラスを使用して構築されたツリーがあるとします。

そして今、あるIDを持つノードを別のノードに変更するメソッドを構築したいと考えています。このノードを見つけるのは簡単ですが、変更方法がわかりません。それを行う簡単な方法はありますか?

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

scala - ケースクラスの抽象化

私はScalaでケースクラスを抽象化する方法を模索しています。たとえば、これはEither[Int, String](Scala 2.10.0-M1とを使用して-Yvirtpatmat)次の試みです。

この定義を考えると、私はそのようなものを書くことができます:

これがモジュールの最初の実装です。ここで、の表現EitherString:です。

unapplyLeftRight本当に排他的にするので、以下は期待どおりに機能します。

ここまでは順調ですね。私の2番目の試みは、次scala.Either[Int, String]の自然な実装として使用することModule.EitherIntOrStringです。

しかし、これは期待どおりに機能しません。

正しい結果を得る方法はありますか?

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

scala - パラメータが反変の位置にあるのはなぜですか?

トレイト内で共変型パラメーターを使用して、次のようなケースクラスを構築しようとしています:

コンパイラは次のように述べています。

次に、次のことを試しましたが、うまくいきませんでした。

今回のエラーは次のとおりです。

ここでTが共変の位置にある理由を誰かが説明し、この問題の解決策を提案できますか? どうも!

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

scala - Scala - コンパニオン オブジェクトをブロックを受け入れる関数への省略形の引数として使用する

モデル オブジェクトのセットとラッパー オブジェクトのセットを用意して、追加機能を提供します。

モデル オブジェクトのコレクションをラッパー オブジェクトに簡潔に変換できるようにしたいと考えていますList("x", "y", "z").foreach(println)

そのModelWrapperため、引数として渡された はModelWrapper(_)、コンパニオン オブジェクトの呼び出しである に変換されます。

ただし、これを試すと、次のようなタイプの不一致エラーが発生します。

ただし、 を作成ModelWrappercase classてコンパニオン オブジェクトを削除すると、機能します。追加する動作が、ケース クラスが機能する全体的な方法にうまく適合しないため、ケース クラスにしたくありません。たとえば、パラメーターとして同じモデル クラスを持つ 2 つのラッパー クラスは、必ずしも等しいとは限りません。

私が知りたいのは、この場合のケース クラスとコンパニオン オブジェクトの違いは何ですか? ケースクラスを使わずに欲しいものを手に入れることはできますか?

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

scala - ケースクラスと形質の線形化

Stepperケースクラスを次のように書きたいとします。

toString素敵な実装が付属しています:

しかし、それは実際には関数ではありません:

Function回避策は、特性を実装することです...

しかし、私はもう素敵な toString 実装を無料で手に入れることはできません:

次に、問題は、これら 2 つの世界の最高のものを手に入れることができるかということです。toString無料で素敵な実装があり、 trait の実装がある解決策はありますFunction。言い換えれば、case class最終的に構文糖が適用されるような方法で線形化を適用する方法はありますか?