Frage

Der Titel sagt es im Grunde.

Gibt es eine Möglichkeit, den Typ von e zu verwenden?G.new Object {def foo = "bar"} in einem isInstanceOf[<structural_type_here>]-Aufruf?

War es hilfreich?

Lösung

Strukturtypen funktionieren nicht mit isInstanceOf.Ebenso sind Musterübereinstimmungen mit Strukturtypen bedeutungslos (sie stimmen immer überein).

Dies wird normalerweise auf das Löschen des Typs zurückgeführt, aber selbst ohne Löschen würde es nicht funktionieren, da JVM strukturelle Typen nicht versteht.

Auf der anderen Seite hätte Scala klug genug sein können, um die Überprüfung des strukturellen Typs durch Löschen zu ermöglichen.

Andere Tipps

Ich möchte sagen, dass Sie einen Typalias verwenden können:

type HasFooMethod = { def foo: String }
val v = new Object {def foo = "bar"}
v.isInstanceOf[HasFooMethod]

Aber das wird dank Löschen immer wahr sein.

Sie können also entweder Reflection verwenden oder einfach versuchen, das Objekt an eine Methode zu übergeben, die einen Strukturtyp als Parameter verwendet. Der Compiler gibt dann einen Fehler aus, wenn er nicht gültig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top