2017-01-13 5 views
2

Wie wäre es möglich, Funktionen zu umgehen, die nicht in DM vorhanden sind, so dass der Hauptcode noch laufen würde? Try/catch nicht zu funktionieren scheint, e..gFunktionen umgehen, die nicht existieren

image doSomething(number a,number b) 
{ 
    try 
    { 
    whateverfunction(a,b) 
    } 
    catch 
    { 
    continue 
    } 
} 


number a,b 
doSomething(a,b) 

Auch Anlage nicht funktionieren, z ..

image doSomething(number a,number b) 
{ 

    if(doesfunctionexist("whateverfunction")) 
    { 
    whateverfunction(a,b) 
    } 
} 


number a,b 
doSomething(a,b) 

Dank im Voraus!

Antwort

0

Da "unbekannte" Befehle vom Skript-Interpreter abgefangen werden, gibt es keinen einfachen Weg, dies zu tun. Sie können jedoch eine Problemumgehung erstellen, indem Sie ExecuteScriptCommand() verwenden.

Es ist ein Beispiel Tutorial in diesem e-book, aber kurz gesagt gefunden werden, wollen Sie so etwas wie die folgenden Funktionen ausführen:

String scriptCallStr = "beep();\n" 
scriptCallStr = "MyUnsaveFunctionCall();\n" 

number exitVal 
Try { exitVal = ExecuteScriptString(scriptCallStr); } 
Catch { exitVal = -1; break; } 

if (-1 == exitVal) 
{ 
    OKDialog("Sorry, couldn't do:\n" + scriptCallStr) 
} 
else 
{ 
    OKDialog("All worked. Exit value: " + exitVal) 
} 

Das funktioniert gut und einfach für einfache Befehle und wenn Sie Ihre Aufgabe nur "verifizieren", dass ein Skript ausgeführt werden könnte.

Es wird ungeschickt, wenn Sie Parameter übergeben müssen. Aber selbst dann gibt es Möglichkeiten, dies zu tun. (Das 'äußere' Skript könnte ein Objekt erstellen und die Objekt-ID pro Zeichenfolge übergeben. Ebenso kann das 'innere' Skript dasselbe tun und die Skriptobjekt-ID als Exit-Wert zurückgeben.)

Hinweis: Sie kann natürlich auch in das Testskript setzen, wenn Sie nur einen "sicheren Test" haben wollen, aber den Befehl eigentlich nicht ausführen wollen.

+0

Vielen Dank! Ich werde diese versuchen! –

0

Je nachdem, was Sie benötigen, gibt es möglicherweise auch eine andere Problemumgehungslösung: Wrapper-Funktionen in einer Bibliothek. Dies kann nützlich sein, wenn Sie dasselbe Skript auf verschiedenen PCs ausführen möchten, von denen einige die Funktionalität haben - wahrscheinlich ein Mikroskop - während andere dies nicht tun. Sie können Ihr Hauptskript Wrapper-Methoden verwenden und dann verschiedene Versionen der Wrapper-Methodenskripts als Bibliotheken installieren.

void My_SpecialFunction() 
{ 
    SpecialFunction() // use this line on PCs which have the SpecialFunction() 
    DoNothing()   // use alternative line on PCs which don't have the SpecialFunction() 
} 

My_SpecialFunction() 

Ich habe dies in der Vergangenheit verwendet, wo die gleiche Funktionalität (-Stufe Bewegung-) verschiedene Befehle auf verschiedene Maschinen erforderlich.

Verwandte Themen