我想编写一个包装器printf(...).
我的第一次尝试是:
sub printf2 {
my $test = sprintf(@_);
print $test;
}
Run Code Online (Sandbox Code Playgroud)
由于数组(在标量上下文中)不是格式字符串,因此不起作用(如预期的那样).
有谁知道解决方案?可能没有使用任何特殊包装?
编辑:在真实的背景下,我想使用sprintf.显然,printf和之间存在差异sprintf.
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'被包裹两次,如何避免这种情况
当我尝试以下操作时,我自己就会出错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)
这不是印刷tuple的seq应该是([1,2,3],[4,5,6]).
我有这个代码:
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 …
我有一个函数,我接收参数作为参数的一部分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)
的varargin在bar(varargin)是含有1×2单元阵列是1x1单元阵列{'ab', 'cdef'}.
我正试着写一些东西:
foo('ab', 'cdef')
Run Code Online (Sandbox Code Playgroud)
可以bar(varargin)在varargin只有1x2单元阵列的地方进行调用{'ab', 'cdef'}.
如何varargin将foo呼叫中的单元阵列的内容传输到呼叫中的单个参数bar?
我正在尝试在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) 我阅读了以下代码片段:
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()拆除线路有什么区别?
我必须执行几个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
在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的新手,我想知道是否有可能创建一个可变参数函数并将变量指针传递给它并将数据写入变量?
我正在寻找的一个明显的例子是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)