价值论证未在Praat中传递

时间:2015-08-17 12:03:52

标签: function arguments 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 个答案:

答案 0 :(得分:1)

您正在混合旧语法("简写")和新语法,以及令人困惑的事情。

当您编写call segment_allowed segment_label$时,您正在使用"简写",并且在该(已弃用)语法样式变量中不会自动插值。如果你想使用那种风格,你应该写

call segment_allowed 'segment_label$'

强制插值。

更好的方法是使用新语法(您在过程定义中使用),这样做了更明智的变量插值。使用这种新语法(可从大约5.4版本获得),您的过程调用应该是

@segment_allowed: segment_label$

应该做你想做的事。

顺便说一句,将当前的过程调用转换为这种新语法,这种语法更容易理解,你所谓的是

@segment_allowed: "segment_label$"

另请注意,for循环中的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