我在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$
为什么函数/过程没有获取实际值并将变量视为字符串?
答案 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