标签: variadic-functions

使用可变参数作为sprintf的参数

我想编写一个包装器printf(...).

我的第一次尝试是:

sub printf2 {
    my $test = sprintf(@_);
    print $test;
}
Run Code Online (Sandbox Code Playgroud)

由于数组(在标量上下文中)不是格式字符串,因此不起作用(如预期的那样).

有谁知道解决方案?可能没有使用任何特殊包装?

编辑:在真实的背景下,我想使用sprintf.显然,printf和之间存在差异sprintf.

perl variadic-functions

1
推荐指数
1
解决办法
929
查看次数

scala varargs(Any*)包裹了两次

  def main(args: Array[String]) {
      foo("hello")
  }

  def foo(args:Any*){
    bar(args)
  }

  def bar(args:Any *){
    println(args)
  }
Run Code Online (Sandbox Code Playgroud)

看看上面的代码,输出是WrappedArray(WrappedArray(hello))

字符串'hello'被包裹两次,如何避免这种情况

scala variadic-functions

1
推荐指数
1
解决办法
384
查看次数

在python中使用函数中的varargs传递默认参数

当我尝试以下操作时,我自己就会出错function definition.

>>> def mymap(*seq,pad=None):
  File "<stdin>", line 1
    def mymap(*seq,pad=None):
   SyntaxError: invalid syntax 
Run Code Online (Sandbox Code Playgroud)

我试图给参数的默认值pad.

但后来,我尝试了这个并且它有效(出于错误的原因):

>>> def mymap(pad=None,*seq):
...    print seq
>>> mymap([1,2,3],[4,5,6])
([4, 5, 6],)
[(4,)]
>>> 
Run Code Online (Sandbox Code Playgroud)

这不是印刷tupleseq应该是([1,2,3],[4,5,6]).

python function variadic-functions default-parameters

1
推荐指数
1
解决办法
1596
查看次数

当**kwargs给出时,如何在python中使*args可选?

我有这个代码:

class Test(object):
   def f1(self,*args,**kwargs):
       print args
       print kwargs
       self.f2(*args,**kwargs)

   def f2(self,*args,**kwargs):
       print "calling f2"
       print "args= ",args
       print "kwargs= ",kwargs

t = Test()
args = [1,2,3]
kwargs= {'a':1,'b':2}
t.f1(args,kwargs)
#second call
t.f1(kwargs)
Run Code Online (Sandbox Code Playgroud)

它打印出来

([1, 2, 3], {'a': 1, 'b': 2})
{}
calling f2
args=  ([1, 2, 3], {'a': 1, 'b': 2})
kwargs=  {}
({'a': 1, 'b': 2},)
{}
calling f2
args=  ({'a': 1, 'b': 2},)
kwargs=  {}
Run Code Online (Sandbox Code Playgroud)

我想*args在构造中选择.那就是如果我通过dict,就像args上面第二次调用一样.我不要那个.我基本上想要这个结构: f1(*args,**kwargs)

-如果*args存在,则处理*args …

python variadic-functions keyword-argument

1
推荐指数
1
解决办法
177
查看次数

从varagin将可变数量的字符串传递给MATLAB函数

我有一个函数,我接收参数作为参数的一部分varargin.但是,在该函数内是另一个函数调用varargin.如何varargin在不使用单元格数组的单元格数组的情况下将第一个内容传递给嵌套函数?

也就是说,给出以下代码:

function foo(varargin)
    bar(varargin)
end

function bar(varargin)
    % Do something with varargin
end

foo('ab', 'cdef')
Run Code Online (Sandbox Code Playgroud)

vararginbar(varargin)是含有1×2单元阵列是1x1单元阵列{'ab', 'cdef'}.

我正试着写一些东西:

foo('ab', 'cdef')
Run Code Online (Sandbox Code Playgroud)

可以bar(varargin)varargin只有1x2单元阵列的地方进行调用{'ab', 'cdef'}.

如何vararginfoo呼叫中的单元阵列的内容传输到呼叫中的单个参数bar

matlab variadic-functions cell-array

1
推荐指数
1
解决办法
121
查看次数

Lua变长函数参数为nil

我正在尝试在lua 5.2中编写一个curry函数.我的代码看起来像这样:

function add(a, b)
    return a + b
end

function curry(func, value)
    return (function (...)
        return func(value, table.unpack(arg))
    end)
end

add2 = curry(add, 2)

print(add2(3))
Run Code Online (Sandbox Code Playgroud)

arg但是该参数不包含传递给add2函数的值.

当我尝试从Lua文档运行示例时,它会出错,因为arg是nil.

printResult = ""

function print (...)
  for i,v in ipairs(arg) do -- arg is nil
    printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
end
Run Code Online (Sandbox Code Playgroud)

如果不起作用,如何在5.2中使用可变长度函数?

编辑:

正如用户@siffiejoe指出的那样,我的功能只是部分应用,而不是正确的currying.这是我使用接受的答案中的错误修复在lua中实现正确的curry函数.

function curry(func, params)        
    return (function (...)
        local args = params or {}        
        if #args + …
Run Code Online (Sandbox Code Playgroud)

null lua functional-programming variadic-functions

1
推荐指数
1
解决办法
1093
查看次数

memset()对va_list的含义是什么?

我阅读了以下代码片段:

va_list args;
memset(&args, 0, sizeof(va_list));

va_start(args, xxx);
...
va_end(args);
Run Code Online (Sandbox Code Playgroud)

memset()之前有va_start()什么含义?

如果memset()拆除线路有什么区别?

c memset variadic-functions

1
推荐指数
1
解决办法
121
查看次数

c ++以任意数量的块的lambda函数可伸缩分组

我必须执行几个lambda函数,但每个Nlambda都prologue()必须运行一个函数.lambdas的数量可以是任意大的,并且N在编译时是已知的.像这样的东西:

static void prologue( void )
{
    cout << "Prologue" << endl;
}

int main()
{
    run<3>( // N = 3
        [](){ cout << "Simple lambda func 1" << endl; },
        [](){ cout << "Simple lambda func 2" << endl; },
        [](){ cout << "Simple lambda func 3" << endl; },
        [](){ cout << "Simple lambda func 4" << endl; },
        [](){ cout << "Simple lambda func 5" << endl; },
        [](){ cout << …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-functions template-specialization variadic-templates c++11

1
推荐指数
1
解决办法
85
查看次数

在C中,我们如何强制varargs函数中的最后一个参数为终止null?

在C++中,我们可能会写这样的东西:

#include <cassert.h>
#include <cstdio.h>
#include <cstdarg.h>

void func(..., short end = 0) {

   // prevent caller from overriding default value with something other than null 
   assert(end == 0);

   va_list args;  

   short x;
   x = va_arg(args, short); 

   while (x != 0) {
       printf("%d", va_arg(args, short));
   }

   va_end(list);

   return;
}
Run Code Online (Sandbox Code Playgroud)

但是,C不支持默认函数参数.有没有我可以强制func在其参数列表的末尾有一个尾随空字符?有没有办法在没有程序员明确地将终止空值传递给函数的情况下执行此操作?

我们不希望看到如下调用:

int   x = 5;
float y = 6.4;
func(x, y, 0);
Run Code Online (Sandbox Code Playgroud)

我们只是想要func(x, y);.

是否可以编写一个可以转换文本的宏

func(x, y);

进入电话:

func(x, y, 0);

有没有办法在没有宏的情况下做到这一点?

c function variadic-functions default-arguments

1
推荐指数
1
解决办法
403
查看次数

如何写入传递给C中的Variadic函数的变量

我是C的新手,我想知道是否有可能创建一个可变参数函数并将变量指针传递给它并将数据写入变量?

我正在寻找的一个明显的例子是scanf从stdin获取输入并将其写入变量的函数.

以下是我想要做的示例:

void fun(int num, ...){
//    insert 2 in a and "abc" in b
}

int main(void){
    int a;
    char *b;
    fun(2, &a, &b);
}
Run Code Online (Sandbox Code Playgroud)

更新我可以改变我的构造函数来获取变量模式而不是它们的数量,所以这里是修改后的代码:

void fun(char *fmt, ...){
//    insert 2 in a and "abc" in b
}

int main(void){
    int a;
    char *b;
    fun("dc", &a, &b);
}
Run Code Online (Sandbox Code Playgroud)

c stdin pointers variadic-functions

1
推荐指数
1
解决办法
325
查看次数