Frage

ähnlich den in Ruby

War es hilfreich?

Lösung

Im Folgenden ist nicht mehr ganz richtig mit dem Dynamic Merkmal in [experimental] Scala 2.9 gefunden. Siehe die Antwort von Kipton Barros, zum Beispiel.

Allerdings Dynamic noch ist nicht ganz wie method_missing, sondern beschäftigt eher Compiler Magie, um effektiv Rewrite Methodenaufrufe zu "fehlenden" Methoden, wie statisch bestimmt, an einen Proxy (applyDynamic). Es ist der Ansatz von statisch Bestimmung der „fehlenden“ Methoden, dass sie unterscheidet von method_missing von einem Polymorphismus Sicht: man braucht, um zu versuchen und dynamisch vorwärts (zum Beispiel mit Reflexion) Methoden wahr method_missing Verhalten zu bekommen. (Natürlich kann dies durch die Vermeidung von Unterarten vermieden werden: -)


Nein. Ein solches Konzept gibt es in Java oder Scala nicht.

Wie Java, alle Methoden in Scala sind ‚gebunden‘ bei der Kompilierung (dies bestimmt auch, welche Methode für Überlastung verwendet wird, etc). Wenn ein Programm kompilieren läßt, wobei das Verfahren existiert (oder tat nach dem Compiler), sonst funktioniert es nicht. Aus diesem Grund erhalten Sie können die NoSuchMethodError wenn Sie eine Klassendefinition ändern, um alle betroffenen Klassen ohne neu zu erstellen.

Wenn Sie sind besorgt, nur zu versuchen, eine Methode für ein Objekt aufzurufen, die Konformität mit einer Signatur ( „getippt Ente eingeben“), dann vielleicht können Sie in der Lage sein, mit wegzuzukommen Struktur Typisierung . Strukturelle Typisierung in Scala ist magisch Zugang über Reflexion - so es die aufschiebt ‚verbindlich‘ erst zur Laufzeit und ein Laufzeitfehler erzeugt werden kann. Im Gegensatz zu method_missing dies nicht dem erlaubt Ziel , um den Fehler zu behandeln, sondern ermöglicht es dem Anrufer (und die Anrufer theoretisch eine definierte methodMissing Methode auf dem Ziel nennen könnten ... aber das ist wahrscheinlich nicht die bester Weg zu nähern Scala Scala ist nicht in Ruby: -).

Andere Tipps

Ja , wie der Scala 2.9 mit der -Xexperimental Option kann man das Dynamic Merkmal verwenden ( scaladoc ) . Klassen, die Dynamic erhalten die magische Methode applyDynamic(methodName, args) welche verhält sich wie Rubys method_missing erweitern.

Unter anderem der Dynamic Eigenschaft kann für die Anbindung mit dynamischen Sprachen auf der JVM nützlich sein.

Nicht wirklich. Es macht keinen Sinn machen. Scala ist eine statisch typisierte Sprache, in der Methoden bei der Kompilierung gebunden sind; Ruby ist eine dynamisch typisierte Sprache, in der Nachrichten sind auf Objekte übergeben, und diese Nachrichten werden zur Laufzeit ausgewertet, die Ruby-Nachrichten Griff ermöglicht, dass es nicht direkt reagiert auf, à la method_missing.

Sie können mimische method_missing in ein paar Möglichkeiten in Scala, insbesondere durch die Schauspieler-Bibliothek, aber es ist nicht ganz dasselbe (oder fast so einfach) wie Rubys method_missing.

Nein, das ist nicht möglich, in Scala 2.8 und früher.

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