Wie Mehrdeutigkeit zu vermeiden, wenn Java von Matlab Aufruf?
Frage
Ich habe gerade entdeckt, dass beim Aufruf von Java von Matlab
object.method(arg1,...,argn)
entspricht
method(object, arg1,...,argn)
Das Problem hier ist, habe ich auch eine method.m
haben, dass einige Übersetzung von Java in Matlab hat (zB. String[]
zu Zelle von Strings konvertieren). Mein method.m
sieht aus wie
function result = method(object, arg1,...argn)
intermediate = object.method(arg1,...argn);
result = translate(intermediate);
Was geschieht, ist, wenn ich method(object, arg1,...,argn)
nennen, ist es die direkte Java Anruf tut, statt meiner mit meinem method.m
Die Lösung ist einfach, nicht einfach die gleiche Methode Namen meiner Java beide Methoden für verwenden und meine .m
Dateien. Aber ist es eine andere Möglichkeit? Wie kann ich wissen, welche Methode den gleichen Namen gegeben genannt werden? Gibt es eine Möglichkeit nenne ich method.m
anstelle der Java-Methode zu gewährleisten? Es ist einfach, einen Aufruf an die Java-Methode, um sicherzustellen, nur die object.method
Syntax verwenden.
Als Randbemerkung, was auch dumm sind die .m
Editor Links zu dem method.m
auf dem method(object, arg1,...,argn)
Anruf, während, wenn es debuggt es die Java-Methode aufruft.
Lösung
Sie können in einige Probleme laufen mit, wie MATLAB nicht Dispatching ...
Wie kann ich wissen, welche Methode die gleichen Namen genannt werden?
Dieser Abschnitt die MATLAB-Dokumentation beschreibt, wie eine Funktion in Fällen gewählt wird, wenn mehrere Funktionen mit dem gleichen Namen sind. Aus der Dokumentation: „Die Funktion Rangfolge bestimmt den Vorrang einer Funktion über eine andere auf der Grundlage der Art der Funktion und seine Position auf dem MATLAB-Pfad.“ Die Bestellung (vom höchsten zum niedrigsten) ist unten angegeben:
- Subfunktion
- Privat Funktion
- Klasse Konstruktor
- überladene Methode
- Funktion in dem aktuellen Verzeichnis
- Funktion an anderer Stelle auf dem Pfad
Die Platzierung Ihres „method.m“ -Funktion wird wahrscheinlich feststellen, ob es aufgerufen wird oder die Java-Methode aufgerufen wird, wenn die „Methode (Objekt, ...)“ mit Syntax.
Gibt es eine Möglichkeit, ich method.m Methode anstelle der Java aufrufen, um sicherzustellen?
Gerade jetzt, ich bin Ihre „method.m“ rate, ist im aktuellen Verzeichnis oder an anderer Stelle auf dem Weg (die beide niedrigsten Vorrang Positionen in sein). Wenn Sie gemacht "method.m" ein Unterfunktion in dem größeren Code nennt es, oder wenn es möglich ist, es in einem privates Verzeichnis , wo es von jeder Funktion aufgerufen werden, die es nennen muss, dann kann es anstelle von get> die Java-Methode, wenn Sie die „Methode verwenden ( Objekt, ...)“Syntax.
Hope, das hilft!
Andere Tipps
hmmmmmmmmm .... Sie könnten versuchen, eine Funktion Griff zu erhalten @method
mit und rufen Sie dann feval()
auf dem Funktionsgriff.
Das könnte funktionieren, aber ich bin mir nicht sicher ....