2 Stimmen

Konvertierung und Schriftlöschung

Gibt es eine bessere Möglichkeit, diesen Codeblock zu schreiben? Ist es insbesondere möglich, die Umrechnung in einer externen Funktion zu berücksichtigen?

nodes collect { case x: InstrumentSource[_] if (x.m <:< implicitly[ClassManifest[BarClose]]) => x.asInstanceOf[InstrumentSource[BarClose]] };

m in InstrumentSource ist ein Klassenmanifest:

case class InstrumentSource[A](implicit val m: ClassManifest[A])

und Knoten ist eine Sammlung von verschiedenen InstrumentSource.

1voto

Peter Schmitz Punkte 5774

Meine Idee ist:

trait HasClassManifest[A] {
  def m: ClassManifest[A]    
}

object <-< {
  def apply[A : ClassManifest](a: HasClassManifest[_]): Boolean = {
    a.m <:< classManifest[A]
  }
}

case class InstSource[A](implicit m: ClassManifest[A]) extends HasClassManifest[A]

Seq(InstSource[Long],InstSource[Double]) collect {
  case x if <-<[Long](x)   => println("long")
  case x if <-<[Double](x) => println("double")
}

(Umbenennung von InstrumentSource in InstSource, damit hier nicht geblättert werden muss)
Der Preis ist also entscheidend HasClassManifest y <-< einmal, und jede Klasse, auf die Sie Patternmatch anwenden wollen, muss die HasClassManifest . Das ist alles.
Aber ich weiß nicht, wie ich den Faktor instanceOf Umstellung auf der rechten Seite im Moment.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X