我试图找出为什么jq
中的range()
函数允许用,
分隔参数,而更通用的样式是用;
分隔其他函数的参数?我知道一个事实,如果sub()
或与,
一起使用的其他函数会抛出一个未定义的错误,很可能是由于原型不匹配。
但为什么range(from;upto)
原型的射程会如此
$ jq -n 'range(0; 4)'
0
1
2
3
和
$ jq -n 'range(0, 4)'
0
1
2
3
对于使用,
的range(from;upto;by)
,行为不端,但我仍然希望抛出一个警告。
# runs as if did range(0; 2)
$ jq -n 'range(0, 4; 2)'
0
1
和
# runs as if did range(0; 4) + range(0; 2)
$ jq -n 'range(0; 4, 2)'
0
1
2
3
0
1
这在jq-1.6
和jq-1.5
中都可以看到。由于官方文档没有讨论涉及,
的原型类型,也不太可能是一个bug,因此应该如何解释,
的行为?
简而言之,jq将范围/1定义为:
def range($x): range(0;$x);
因此范围(0,$n(评估为
range(0), range($n)
其产生相当于流的流empty, range($n)
range(0;$n)
要点也许是"逗号"运算符可以自由使用。