2017-01-13 10 views
2

как можно обойти функции, которые не существуют в DM , так что основной код все равно будет работать? Try/улов, кажется, не работает, e..gОбход функций, которые не существуют

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


number a,b 
doSomething(a,b) 

Также кондиционирование не будет работать, например ..

image doSomething(number a,number b) 
{ 

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


number a,b 
doSomething(a,b) 

спасибо заранее!

ответ

0

Поскольку «неизвестные» команды пойманы интерпретатором сценариев, нет простого способа сделать это. Однако вы можете создать обходной путь, используя ExecuteScriptCommand().

Существует пример учебник можно найти в этом e-book, но в общем, вы хотите сделать что-то вроде следующего:

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) 
} 

Это прекрасно работает и легко для простых команд, и если ваша задача только «проверить», что сценарий может работать.

Это становится неуклюжим, когда вам нужно пройти параметры. Но даже тогда есть способы сделать это. («Внешний» скрипт может создать объект и передать идентификатор объекта в строку. Аналогично, внутренний скрипт может сделать то же самое и вернуть идентификатор объекта сценария в качестве значения выхода.)

Примечание: вы может, конечно, также поставить doesfunctionexist внутри тестового скрипта, если вы хотите только иметь «безопасный тест», но на самом деле не хотите выполнять команду.

+0

Спасибо большое! Я попробую! –

0

В зависимости от того, что вам нужно, также может быть другое решение: Обертки-функции в библиотеке. Это может быть полезно, если вы хотите запустить тот же скрипт на разных ПК, некоторые из которых имеют функциональность - скорее всего, какой-то микроскоп, а другие нет. Вы можете сделать свой основной сценарий использующими методы-обертки, а затем установить разные версии сценариев сценариев метода оболочки как библиотеки.

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() 

Я использовал это в прошлом, когда одна и та же функциональность (-stage movement-) требовала различных команд на разных машинах.