Передача массива в глобальную процедуру - PullRequest
0 голосов
/ 12 декабря 2011

Так что мне нужно передать массив в global procedure, но, как обычно, я должен переопределить его. Я знаю, что это небольшой вопрос, но можно ли передать массив в качестве процедуры? Если нет, можно ли сделать его глобальным и вставить в процедуру.

$selectedFace = `ls -selection` ;

global proc crTestScripts($selectedFace) {
    print ("OMG aren't lists of things awesome?!" + $selectedFace) ;
}

или

$selectedFace = `ls -selection` ;
global array? $selectedFace ;

global proc crTestScripts() {
    global array? $selectedFace ;
    print ("OMG aren't lists of things awesome?!" + $selectedFace) ;
}

Я передаю эту строку и все еще получаю эту ошибку:

Error: Wrong number of arguments on call to applyCurrentType

Вот пример кода:

string $selectedFace[] = `ls -sl` ;  

global proc applyCurrentType (string $selectedFace[]) {
    print("Apply Current Type button clicked\n") ;
    global int $applyCurrentType ;
    $applyCurrentType = 1 ;
    select -cl ;
    select $selectedFace ;
    crTestScripts ;
}

Ответы [ 2 ]

0 голосов
/ 20 февраля 2013

мой предыдущий ответ был неверным.

, поэтому для передачи массива в процесс нужно переопределить его как глобальную переменную, string $selectedFace[]; станет global string $selectedFace[]; внутри процедуры. e.g.:

string $selectedFace[] = filterExpand("-sm", 34, `ls-selection`);

global proc crTestScripts(){

    global string $selectedFace[];
    print $selectedFace;
}

crTestScripts(); // result: body_skinPrx_finalSkin.f[103]

filterExpand дает два преимущества: он выравнивает массив ls -fl, и вы можете использовать несколько фильтров -sm 34 -sm 31

или, я думаю, лучший способ ... (мне не нравятся глобальные переменные) просто используйте обычный синтаксис объявления переменных для аргументов в круглых скобках:

global proc proc_name (* args_here) {somecode; вернуть; }

* арг:

строка $ str, строка $ ls_str [], число с плавающей точкой $ scaleX, число с плавающей точкой $ scale []; .. вектор $ vec и т. Д.

global proc hide_items(string $items[]){
    hide $items;
}

с использованием предыдущего результата списка $selectedFace:

hide_items($selectedFace);

упс ... я забыл, майя не может скрывать лица xD

0 голосов
/ 12 декабря 2011

Я использовал proc createControllers(string $name[], int $position) в сценарии автоматической установки, который принимает массив. Я не использую термины global при использовании mel, так как maya требовательна, и просто использую функцию rehash всякий раз, когда я изменяю свой скрипт;

proc buildRig()
{
    string $rootNode[]=`ls -sl`;
    createControllers($rootNode, 0);    
} 

proc createControllers(string $name[], int $position)

работал для меня. В массиве proc createControllers my $name равен массиву $rootNode.

Надеюсь, это поможет, удачи!

...