按价值论证未在 Praat 中传递
Argument by value not being passed in 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$
为什么 function/procedure 不获取实际值并将变量视为字符串?
您将旧语法 ("shorthand") 和新语法混合在一起,这是令人困惑的事情。
当您编写 call segment_allowed segment_label$
时,您使用的是 "shorthand",在这种情况下(已弃用)语法样式变量不会自动插入。如果你想使用那种风格,你应该写
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
我用 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$
为什么 function/procedure 不获取实际值并将变量视为字符串?
您将旧语法 ("shorthand") 和新语法混合在一起,这是令人困惑的事情。
当您编写 call segment_allowed segment_label$
时,您使用的是 "shorthand",在这种情况下(已弃用)语法样式变量不会自动插入。如果你想使用那种风格,你应该写
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