私はScalaを初めて使い慣れたので、同様の質問で見ていますが、間違っていると私の質問と同じであるとは確信していません。複数のケースクラスの配列にScalaの値を抽出します
は基本的に、私は(私が3以上のものを持っている持っているように)モデルの任意の数のこのコード
case class ModelX(a: Int, b: Int)
case class ModelY(b: Int, c: Int)
case class ModelZ(a: Int, c: Int)
def extract_x(e: ModelX): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
def extract_y(e: ModelY): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
def extract_z(e: ModelZ): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
をリファクタリングする方法がわからないと思います。私がこれをやっている理由は、カッサンドラからこれらのモデルの1つに行を抽出することができることです。この点を覚えていれば、逐次化の方法があるのでArray[Any]
に渡す必要があります。私の選択した言語でもっと楽に。
基本クラスにextract
を適用することができるように、ModelX|Y|Z
が拡張する基本クラスを定義しようとしましたが、productIterator
は基本クラスでは使用できません。それが悪いの説明だった場合、私が試した/やってみたかったことは、このでした:
class BaseModel()
case class ModelX(a: Int, b: Int) extends BaseModel
case class ModelY(b: Int, c: Int) extends BaseModel
case class ModelZ(a: Int, c: Int) extends BaseModel
def extract(e: BaseModel): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
私はスカラ座に非常に新しいので、私は私が何かを明らかに見逃していると想像。ここのお手伝いをいただければ幸いです。あなたはちょうどそれがまたはあなたがすべてのProduct
でこのメソッドを呼び出すことができる問題であってもなくてもよい
def extract(e: Product): Array[Any] = ...
を書くことができるように
アクヒル
ありがとうございます!最初の提案は完全に機能しました。 –