2015-08-17 4 views
0

Я сделал процедуру в Praat скрипт, который выглядит следующим образом:Аргумент значение не передается в Praat

procedure segment_allowed: .segment$ 
    appendInfoLine: "The argument I got was: ", .segment$ 
    .yes = 0 
    for i from 1 to allowed_segments_size 
     if allowed_segments$[i] = .segment$ 
      .yes = 1 
     endif 
    endfor 
endproc 

Это в основном пытается выяснить, если .segment$ существует в глобальном массиве allowed_segments$.

Функция при вызове, как это:

call segment_allowed segment_label$ 

всегда выводит:

The argument I got was segment_label$ 

Почему функция/процедура не собирание фактического значения и обработки переменной как строки?

ответ

1

Вы смешиваете старый синтаксис («стенография») и новый синтаксис, и это путает вещи.

Когда вы пишете call segment_allowed segment_label$, вы используете «стенографию», и в этом (устаревшем) синтаксическом стиле переменные стиля не будут автоматически интерполированы. Если вы хотите использовать этот стиль, напишите

call segment_allowed 'segment_label$' 

для принудительной интерполяции.

Гораздо лучший способ сделать это - использовать новый синтаксис (который вы используете в определении своей процедуры), который делает гораздо более разумную интерполяцию переменных. Используя этот новый синтаксис (доступный примерно от версии 5.4), ваш запрос процедуры должен быть

@segment_allowed: segment_label$ 

, который должен делать то, что вы хотите.

Как и в сторону, переводя текущий вызов процедуры в этот новый синтаксис, который легче понять, что вы звонили было

@segment_allowed: "segment_label$" 

Также отметим, что from 1 в течение циклов является излишним, так как это по умолчанию. И если вам интересно узнать, есть ли этот сегмент или нет, вы можете выйти из цикла, когда совпадение найдено, как это (я также изменил ваш i на .i, чтобы все было в порядке):

procedure segment_allowed: .segment$ 
    appendInfoLine: "The argument I got was: ", .segment$ 
    .yes = 0 
    for .i to allowed_segments_size 
     if allowed_segments$[.i] = .segment$ 
      .yes = 1 
      .i += allowed_segments_size 
     endif 
    endfor 
endproc 
Смежные вопросы