函数可以接受形参,形参可以是位置形参,也可以是命名形参。通常,“位置”函数的第一个参数从$1开始。因为函数可以是数组的元素,所以它们也可以像全局(或局部)函数一样接受参数。这一切都很好(与正确的支撑)。
但是当函数从数组中运行时,使用[($数组——> fn)你好),参数“hello”位于$0,而不是预期的$1。对于多个参数,在全局作用域函数中是$2,在数组中定义函数时是$1。基本上,第一个参数是$0还是$1取决于它的位置。即使mixin一个命名参数仍然工作,位置参数只是移动了一个,键=值的工作像往常一样在任何地方。
我会说这是虫子,但比虫子更微妙。但我可以看到逻辑:数组函数更像是CS术语中的匿名函数,而全局函数是命令(命令有名称,名称是参数)-所以是第一个参数已知的函数的值总是$0,如果可用,它可以是它的名称。
然而,这个逻辑是相当微妙的,因为我不知道为什么相同的函数在从全局剪切和粘贴代码到数组时表现不同-我没有注意到它们只是移位:它们只是看起来错误/旧/有时,显然导致代码期望$1=“yes”而不是$1=nil。修复方法很简单:当函数在数组中定义时使用$0。
我认为这显示了我遇到的问题(尽管在示例中比在实际脚本中更明显):
代码:选择所有
$hello:set $hello do={:put "$0 $1"} $hello world #>> $hello world:global greetings [toarray ""]:set ($greetings->"hello") do={:put "hello $1"} [($greetings->"hello") world] #>> hello{/终端样式错误;Put "expected: 'hello world'而不仅仅是'hello'字符串";#使用$0代替,works::set ($greetings->"hello") do={:put "hello $0"} [($greetings->"hello") world] #>> hello world