标签: variadic-functions

在Python中解释关键字参数(VarArgs)

请参阅以下代码: -

#!/usr/bin/python
# Filename: total.py

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下*数字和**关键字如何获取参数?很简单的解释非常感谢提前感谢

python variadic-functions

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

参数为varargs时的Class.getMethod

我需要调用Class.getMethod(java.lang.String,java.lang.Class ...)来获取一个方法,其中一个varargs参数是一个varargs.

目前我正在尝试:

// to get jdbcTemplate.queryForObject(RowMapper, Object...)
jdbcTemplate.getClass().getMethod("queryForObject", RowMapper.class, Object.class);
Run Code Online (Sandbox Code Playgroud)

哪个结果,不足为奇

Caused by: java.lang.NoSuchMethodException: org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForObject(java.lang.String,     org.springframework.jdbc.core.RowMapper, java.lang.Object)
at java.lang.Class.throwNoSuchMethodException(Class.java:283)
at java.lang.Class.getMethod(Class.java:825)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

java reflection variadic-functions

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

ARC中的虚假va_list

我需要在iOS应用程序中创建一个假va_list的传递给NSString initWithFormat:arguments:函数,这是我的代码:

NSArray *fixedArguments = [[NSArray alloc] initWithArray:arguments]; 

NSRange range = NSMakeRange(0, [fixedArguments count]);

va_list fakeArgList = (va_list)malloc(sizeof(NSString *) * [fixedArguments count]);

__unsafe_unretained id *ptr = (__unsafe_unretained id *)fakeArgList;

[fixedArguments getObjects:ptr range:range];

content = [[NSString alloc] initWithFormat:outputFormat
                                            arguments:(va_list)fakeArgList];
free(fakeArgList);
Run Code Online (Sandbox Code Playgroud)

编译器在转换线上抱怨此消息:

error: cast of a non-Objective-C pointer type 'va_list' (aka 'char *') to '__unsafe_unretained id *' is disallowed with ARC
Run Code Online (Sandbox Code Playgroud)

getObjects:range:功能定义如下:

- (void)getObjects:(id __unsafe_unretained [])objects range:(NSRange)range;
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切,但仍然无法摆脱这个错误......

是否有va_list启用ARC 创建假的解决方案?我究竟做错了什么?

objective-c variadic-functions ios automatic-ref-counting

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

我可以在printf中传递一个预期整数的字符吗?

以下代码是否正确?

char mychar = 200;
printf("%x", mychar);
Run Code Online (Sandbox Code Playgroud)

根据http://www.cplusplus.com/reference/clibrary/cstdio/printf/ %x期望一个整数(我的编译器为4个字节),我在这里只传递1个字节.由于printf使用了varargs,我担心这只会因为堆栈上的字节对齐而起作用(即,当在堆栈上按下时,char总是使用4个字节).

我认为最好写一下:

char mychar = 200;
printf("%x", static_cast<int>(mychar));
Run Code Online (Sandbox Code Playgroud)

你认为第一个代码是否安全?如果没有,如果我切换到bigendian架构,你认为我能得到不同的输出吗?

c c++ variadic-functions

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

在Swift中将列表从一个函数传递到另一个函数

我不太明白为什么我不能将Int []从一个函数传递到另一个函数:

func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}

func average(numbers:Int...) -> Double {
    var sum = sumOf(numbers)

    return Double(sum) / Double(numbers.count)
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

Playground execution failed: error: <REPL>:138:19: error: could not find an overload for '__conversion' that accepts the supplied arguments

var sum = sumOf(numbers)
          ^~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

variadic-functions swift

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

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

如何创建一个接受可变数量的int的C++构造函数

是否可以约束可变参数构造函数中的参数类型?

我希望能够表达

X x1(1,3,4);
X x2(3,4,5);

// syntax error: identifier 'Args'
class X {
template<int ... Args> X(Args...)
{
}
};
// this works but allows other types than int
class Y {
template<typename ... Args> Y(Args...)
{
}
};
Run Code Online (Sandbox Code Playgroud)

编辑以澄清意图:

我想要实现的是将传递给构造函数的数据(编译时已知的常量)存储到静态数组中.

所以还有其他一些

template<int ...values>
struct Z
{
    static int data[sizeof...(values)];
};

template<int ... values>
int Z<values...>::data[sizeof...(values)] = {values...};
Run Code Online (Sandbox Code Playgroud)

并且在XI的构造函数中想要像这样使用Z:

class X {
    template<int ... Args> X(Args...)
    {
        Z<Args...>::data // do stuff with data
    }
};
Run Code Online (Sandbox Code Playgroud)

这可能,我们必须使用integer_sequence吗?

c++ variadic-functions

17
推荐指数
2
解决办法
3153
查看次数

变量函数(va_arg)不适用于float?

我有一个variadic函数,它接受一个float参数.为什么不起作用?

va_arg(arg, float)
Run Code Online (Sandbox Code Playgroud)

c floating-point variadic-functions

16
推荐指数
2
解决办法
8518
查看次数

对重载定义的模糊引用 - 一对二参数

给定以下具有重载版本的伴随对象apply:

object List {
  def apply[T](): List[T] = new Nil
  def apply[T](x1: T): List[T] = new Cons(x1, new Nil)
  def apply[T](x1: T, x2: T): List[T] = new Cons(x1, new Cons(x2, new Nil))
  def apply[T](elems: T*): List[T] = 
    elems.foldRight(List[T])((elem, l) => new Cons(elem, l))
}
Run Code Online (Sandbox Code Playgroud)

和两个实例

List(1) // Error - Ambiguity 
List('a', 'b') // Works fine
Run Code Online (Sandbox Code Playgroud)

scalac抱怨第一个实例化(对重载定义的模糊引用),因为单个参数和varargs方法都是同样具体的.

搜索stackoverflow我发现可以强制使用单个参数方法.List[Int](1)将使编译器使用def apply[T](x1: T).

我的问题是为什么第二个实例化def apply[T](x1: T, x2: T)没有额外的"提示" 匹配?换句话说,为什么两个参数方法比单个参数方法不是的varargs方法更 …

scala overloading variadic-functions

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

变量长度参数是否被视为Java中的数组?

据我所知,array由一定数量的元素组成,并且variable length argument你传递的参数数量相同(相同类型).但他们一样吗?我可以通过另一个预期的地方吗?

java arrays variadic-functions

16
推荐指数
3
解决办法
3万
查看次数