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。