Programming languages 是否有任何编程语言的函数末尾不带变量参数? Python、C++、Stand等都允许您定义在参数列表末尾处采取可变数量的参数的函数…< /P> def function(a, b, *args): #etc...
…可按如下方式调用:Programming languages 是否有任何编程语言的函数末尾不带变量参数? Python、C++、Stand等都允许您定义在参数列表末尾处采取可变数量的参数的函数…< /P> def function(a, b, *args): #etc...,programming-languages,function,arguments,variadic-functions,Programming Languages,Function,Arguments,Variadic Functions,…可按如下方式调用: function(1, 2) function(1, 2, 5, 6, 7, 8) 等等。。。是否有其他语言允许您使用参数列表执行变量函数?大概是这样的: def function(int a, string... args, int theend) {...} 所有这些都是有效的: function(1, 2) function(1, "a", 3) function(1, "b", "c", 4) 另外,参数列表中任意位置的可选参数呢 def function(i
function(1, 2)
function(1, 2, 5, 6, 7, 8)
等等。。。是否有其他语言允许您使用参数列表执行变量函数?大概是这样的:
def function(int a, string... args, int theend) {...}
所有这些都是有效的:
function(1, 2)
function(1, "a", 3)
function(1, "b", "c", 4)
另外,参数列表中任意位置的可选参数呢
def function(int a, int? b, int c, int... d) {}
function(1, 2) //a=1, c=2, b=undefined/null/something, d=[]
function(1,2,3) //a=1, b=2, c=3,d=[]
function(1,2,3,4,5) //a=1, b=2, c=3, d=[4,5]
可能就是你要找的。我认为Ruby中也有类似的安排。另请参见。可能就是您要寻找的。我认为Ruby中也有类似的安排。另请参见。我认为PHP很重要。您可以这样做来模拟您正在寻找的内容。就我个人而言,我认为这会让人困惑
function foo() {
$args = func_get_args(); // returns an array of args
}
我想PHP很重要。您可以这样做来模拟您正在寻找的内容。就我个人而言,我认为这会让人困惑
function foo() {
$args = func_get_args(); // returns an array of args
}
BASIC已经有这个功能很多年了 例如:
LOCATE [row%] [,[column%] [,[cursor%] [,start% [,stop%]]]]
此命令设置光标的位置行%、列%,并指定光标大小开始%、停止%以及光标是否实际可见%。在这里,方括号中的所有内容都可以省略,如果是,则该属性不会更改
用法示例:
LOCATE , 5
更改为第5列,或
LOCATE 1, , 0
移动到第一行并使光标不可见
可以看到的另一个命令是用于写入文件的PUT命令。如果中间参数file seek位置被省略,则在上一次写入之后会发生写入
重要的是,参数省略仅见于内置语句,而非用户定义的过程和函数
就实现而言,这是Microsoft Basic编译器BC在调用定位时所做的:
对于每个参数:
如果省略了参数,则按0
如果提供了参数,请按1,然后按实际值
推动参数计数
调用库函数
BASIC已经有这个功能很多年了 例如:
LOCATE [row%] [,[column%] [,[cursor%] [,start% [,stop%]]]]
此命令设置光标的位置行%、列%,并指定光标大小开始%、停止%以及光标是否实际可见%。在这里,方括号中的所有内容都可以省略,如果是,则该属性不会更改
用法示例:
LOCATE , 5
更改为第5列,或
LOCATE 1, , 0
移动到第一行并使光标不可见
可以看到的另一个命令是用于写入文件的PUT命令。如果中间参数file seek位置被省略,则在上一次写入之后会发生写入
重要的是,参数省略仅见于内置语句,而非用户定义的过程和函数
就实现而言,这是Microsoft Basic编译器BC在调用定位时所做的:
对于每个参数:
如果省略了参数,则按0
如果提供了参数,请按1,然后按实际值
推动参数计数
调用库函数
下一个C++可以用这个语法来实现:
void f(int a, std::initializer_list<int> b, int c) {
// b.begin(), b.end(), b.size() allow to access them
}
void g() {
f(1, { 2, 3, 4, 5 }, 2);
}
下一个C++可以用这个语法来实现:
void f(int a, std::initializer_list<int> b, int c) {
// b.begin(), b.end(), b.size() allow to access them
}
void g() {
f(1, { 2, 3, 4, 5 }, 2);
}
有几种语言perl、python和许多其他语言可以执行命名参数,这类似于在参数列表中的任何位置执行可选参数。。。命名的参数可以以任何顺序出现,并且其中任何一个都可以是可选的。。。严格来说,它们并不相同,但它们很接近
不确定varargs,尽管它们通常可以替换为array/hash/list对象…几种语言perl、python,还有许多其他语言可以执行命名参数,这类似于在参数列表中的任何位置执行可选参数。。。命名的参数可以以任何顺序出现,并且其中任何一个都可以是可选的。。。严格来说,它们并不相同,但它们很接近
虽然varargs通常可以用array/hash/list对象替换,但不确定varargs…Ruby 1.9及更高版本的未来版本,Ruby 1.9计划在2009年1月底发布 然而,哪一个值绑定到哪一个参数并不总是显而易见的 这是Ruby 1.9所接受的: 0个或多个强制参数,后跟0个或多个可选参数,后跟0个或多个强制参数,后跟rest参数,后跟0个或多个强制参数 例如:
def meth mand1, opt1 = :def1, o2 = :d2, *args, m2, m3
puts %w[mand1 opt1 o2 m2 args m3].inject('') { |s, arg|
s << "#{arg} = #{(eval arg).inspect}, "
}.gsub /, $/, ''
end
meth :arg1, :a2, :a3
# => mand1 = :arg1, opt1 = :def1, o2 = :d2, m2 = :a2, args = [], m3 = :a3
meth :arg1, :a2, :a3, :a4
# => mand1 = :arg1, opt1 = :a2, o2 = :d2, m2 = :a3, args = [], m3 = :a4
meth :arg1, :a2, :a3, :a4, :a5
# => mand1 = :arg1, opt1 = :a2, o2 = :a3, m2 = :a4, args = [], m3 = :a5
meth :arg1, :a2, :a3, :a4, :a5, :a6
# => mand1 = :arg1, opt1 = :a2, o2 = :a3, m2 = :a5, args = [:a4], m3 = :a6
meth :arg1, :a2, :a3, :a4, :a5, :a6, :a7
# => mand1 = :arg1, opt1 = :a2, o2 = :a3, m2 = :a6, args = [:a4, :a5], m3 = :a7
如您所见,强制参数首先从左到右绑定。然后绑定可选参数,如果有剩余的参数,则将它们捆绑在一个数组中并绑定到其余参数。Ruby 1.9及更高版本的未来版本,Ruby 1.9计划在2009年1月底发布 然而,哪一个值绑定到哪一个参数并不总是显而易见的 这是Ruby 1.9所接受的: 0个或多个强制参数,后跟0个或多个可选参数,后跟0个或多个强制参数,后跟rest参数 由0个或多个必需参数创建 例如:
def meth mand1, opt1 = :def1, o2 = :d2, *args, m2, m3
puts %w[mand1 opt1 o2 m2 args m3].inject('') { |s, arg|
s << "#{arg} = #{(eval arg).inspect}, "
}.gsub /, $/, ''
end
meth :arg1, :a2, :a3
# => mand1 = :arg1, opt1 = :def1, o2 = :d2, m2 = :a2, args = [], m3 = :a3
meth :arg1, :a2, :a3, :a4
# => mand1 = :arg1, opt1 = :a2, o2 = :d2, m2 = :a3, args = [], m3 = :a4
meth :arg1, :a2, :a3, :a4, :a5
# => mand1 = :arg1, opt1 = :a2, o2 = :a3, m2 = :a4, args = [], m3 = :a5
meth :arg1, :a2, :a3, :a4, :a5, :a6
# => mand1 = :arg1, opt1 = :a2, o2 = :a3, m2 = :a5, args = [:a4], m3 = :a6
meth :arg1, :a2, :a3, :a4, :a5, :a6, :a7
# => mand1 = :arg1, opt1 = :a2, o2 = :a3, m2 = :a6, args = [:a4, :a5], m3 = :a7
如您所见,强制参数首先从左到右绑定。然后可选的参数被绑定,如果有任何参数被保留,它们会被捆绑在一个数组中并绑定到余下的参数。< P> R,统计语言也有,它可以在列表中间,但是有细微的语义。
r,统计语言也有,它可以在列表中间,但有微妙的语义。
它称为REST参数,它至少可以用C++和java来完成。谷歌Rest参数,你会发现很多关于这个主题的数据,比如传递数字的函数,返回输入数字的平均值,可能是传递的所有数字的最小值或最大值。如您所见,这些特性有很多用途,我在MYSQL中输入数据的代码中使用了它,所以当我想添加行时,我只需添加表名作为第一个字符串,其余的都是列名,然后是它们的数据,而不必坐在那里反复手动执行。祝你好运 < P>被称为REST参数,它至少可以用C++和java来完成。谷歌Rest参数,你会发现很多关于这个主题的数据,比如传递数字的函数,返回输入数字的平均值,可能是传递的所有数字的最小值或最大值。如您所见,这些特性有很多用途,我在MYSQL中输入数据的代码中使用了它,所以当我想添加行时,我只需添加表名作为第一个字符串,其余的都是列名,然后是它们的数据,而不必坐在那里反复手动执行。祝你好运 为什么不直接使用数组\集合?你可以。那么为什么Python/C++中有*args呢?人们似乎喜欢他们;但每个人都有自己的想法:为什么不使用数组\集合呢?你可以。那么为什么Python/C++中有*args呢?人们似乎喜欢他们;但对他自己来说:是的,正如它发生的那样,C++得到了一个版本:看起来新的版本将被释放2010。您可以使用当前gcc主干处理初始值设定项列表,该主干已经支持它们,至少同意您可以编译和使用上面的代码:我认为在本例中,b只是一个参数。在函数g中,f调用三个参数:1、{2、3、4、5 },并且2,是的,正如它发生的那样,C++得到了一个版本:看起来新的2010将被释放。您可以使用当前gcc主干处理初始值设定项列表,该主干已经支持它们,至少同意您可以编译和使用上面的代码:我认为在本例中,b只是一个参数。在函数g中,f用三个参数调用:1、{2,3,4,5}和2。哦,天哪,Ruby语法高亮显示异常糟糕,即使对于prettify.js.Oh,Ruby语法高亮显示也异常糟糕,即使对于prettify.js。