タグ付けされた質問 「case-class」

16
Scalaのケースクラスとクラスの違いは何ですか?
Googleで検索して、a case classとaの違いを見つけましたclass。クラスでパターンマッチングを実行する場合は、ケースクラスを使用すると誰もが述べています。それ以外の場合は、クラスを使用し、equalsやハッシュコードのオーバーライドなどの追加の特典について言及します。しかし、これらがクラスの代わりにケースクラスを使用するべき唯一の理由ですか? Scalaのこの機能には、いくつかの非常に重要な理由があると思います。説明とは何ですか、またはScalaケースクラスの詳細を学ぶためのリソースはありますか?

14
ScalaでのCaseオブジェクトと列挙
いつ使用するかに関するベストプラクティスのガイドラインはありますか ScalaでEnumerationを拡張場合とケースクラス(またはケースオブジェクト)場合のか? 彼らは同じ利点のいくつかを提供するようです。

1
IntelliJ Scalaプラグインのケースクラスインデントはばかげている
ケースクラスに多くのフィールドがあり、それらの名前が長い場合、多くの場合、次のように各行に各フィールドを記述することをお勧めします。 case class Person ( name: String, age: Int ) これはC / C ++ struct定義に似ており、ケースクラスが大きくなっても完全に読み取り可能です。しかし、IntelliJ IDEAのデフォルトのScalaプラグインは自動的にインデントを変更します: case class Person ( name: String, age: Int ) 奇妙に見えますが、Scalaスタイルガイドでは、ケースクラスのインデントについては何も触れられていません。 この動作を変更する可能性のあるIDE設定には何も見つかりませんでした。上記のように自動インデントを機能させるか、ケースクラスの自動インデントを無効にするオプションはありますか?

7
ネストされた構造を更新するためのより明確な方法
次の2つのcase classes があるとします。 case class Address(street: String, city: String, state: String, zipCode: Int) case class Person(firstName: String, lastName: String, address: Address) および次のPersonクラスのインスタンス: val raj = Person("Raj", "Shekhar", Address("M Gandhi Marg", "Mumbai", "Maharashtra", 411342)) 更新したい場合はzipCode、raj次のようにする必要があります。 val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1)) ネストのレベルが増えると、さらに醜くなります。update-inそのようなネストされた構造を更新するためのより明確な方法(Clojureのようなもの)はありますか?
124 scala  case-class  zipper 

6
単純なケースクラスの順序を定義する簡単な慣用的な方法
単純なscalaケースクラスのインスタンスのリストがあり、を使用して予測可能な辞書式順序でそれらを印刷したいのですlist.sortedが、「...に対して暗黙の順序付けが定義されていません」というメッセージが表示されます。 ケースクラスの辞書式順序を提供する暗黙的なものはありますか? 辞書式の順序付けをケースクラスにミックスインする簡単な慣用的な方法はありますか? scala> case class A(tag:String, load:Int) scala> val l = List(A("words",50),A("article",2),A("lines",7)) scala> l.sorted.foreach(println) <console>:11: error: No implicit Ordering defined for A. l.sorted.foreach(println) ^ 私は「ハック」に満足していません: scala> l.map(_.toString).sorted.foreach(println) A(article,2) A(lines,7) A(words,50)

5
Scalaケースクラスを宣言することの欠点は何ですか?
多くの美しく不変のデータ構造を使用するコードを記述している場合、caseクラスは天の恵みのように見え、1つのキーワードだけで以下のすべてを無料で提供します。 デフォルトではすべて不変 自動的に定義されたゲッター まともなtoString()実装 準拠するequals()およびhashCode() マッチングのためのunapply()メソッドを持つコンパニオンオブジェクト しかし、不変のデータ構造をケースクラスとして定義することの欠点は何ですか? クラスまたはそのクライアントにはどのような制限がありますか? ケース以外のクラスを優先する必要がある状況はありますか?
105 scala  case-class 

4
Scalaケースクラスの継承
Squerylをベースにしたアプリケーションがあります。モデルをケースクラスとして定義します。これは主に、コピーメソッドがあると便利だからです。 厳密に関連する2つのモデルがあります。フィールドは同じで、多くの操作が共通しており、同じDBテーブルに格納されます。ただし、2つのケースのいずれかでのみ意味がある、または両方のケースで意味があるが異なる動作がいくつかあります。 これまで、モデルのタイプを区別するフラグを持つ単一のケースクラスのみを使用してきました。モデルのタイプに基づいて異なるすべてのメソッドは、ifで始まります。これは煩わしく、タイプセーフではありません。 私がやりたいのは、祖先のケースクラスの共通の動作とフィールドを因数分解し、2つの実際のモデルにそれを継承させることです。しかし、私が理解している限り、Scalaではケースクラスからの継承は嫌われており、サブクラス自体がケースクラス(私の場合ではない)である場合でも禁止されています。 ケースクラスから継承する際に知っておくべき問題と落とし穴は何ですか?私の場合、そうすることは理にかなっていますか?

10
ケースクラスコンパニオンで適用をオーバーライドする方法
これが状況です。次のようなケースクラスを定義したいと思います。 case class A(val s: String) そして、クラスのインスタンスを作成するときに、次のように「s」の値が常に大文字になるようにオブジェクトを定義したいと思います。 object A { def apply(s: String) = new A(s.toUpperCase) } ただし、Scalaがapply(s:String)メソッドが2回定義されていると文句を言っているため、これは機能しません。ケースクラスの構文で自動的に定義されることは理解していますが、これを実現する別の方法はありませんか?パターンマッチングに使用したいので、ケースクラスを使い続けたいと思います。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.