标签: variadic-functions

叫哪种方法?(整数... a)与(int a,int b)

我刚刚发现了一个非常有趣的Java技巧:

void method1(Integer... a){
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以根据需要为此方法提供尽可能多的整数.

现在,如果我有一个类似的(重载)方法,如下所示:

void method1(int a, int b){

}
Run Code Online (Sandbox Code Playgroud)

执行以下行时运行哪个方法:

method1(1, 2);
Run Code Online (Sandbox Code Playgroud)

好吧,我可以通过用不同的方法指令测试它很容易找到它但是当我想到"重载"方法中的"规则"时,我必须确保每个重载方法必须相同,以便编译器知道究竟要使用哪一个.

在我看来,上面的代码不应该工作,因为编译器应该混淆.但是,当我尝试它时,它的工作原理.

所以..有没有人知道更多关于此的背景信息?

java methods overloading variadic-functions

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

Scala中可变长度参数列表的类型是什么?

假设我声明一个函数如下:

def test(args: String*) = args mkString
Run Code Online (Sandbox Code Playgroud)

是什么类型的args

scala variadic-functions

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

如何使用可变参数转发函数?

在Swift中,如何将数组转换为元组?

问题出现了,因为我试图调用一个函数,该函数在一个带有可变数量参数的函数中接受可变数量的参数.

// Function 1
func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}
// Example Usage
sumOf(2, 5, 1)

// Function 2
func averageOf(numbers: Int...) -> Int {
    return sumOf(numbers) / numbers.count
}
Run Code Online (Sandbox Code Playgroud)

这个averageOf实现对我来说似乎很合理,但它不能编译.当您尝试调用时,它会出现以下错误sumOf(numbers):

Could not find an overload for '__converstion' that accepts the supplied arguments
Run Code Online (Sandbox Code Playgroud)

里面averageOf,numbers有类型Int[].我相信sumOf期待一个元组而不是阵列.

因此,在Swift中,如何将数组转换为元组?

arrays variadic-functions swift

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

数组声明中的PHP Spread运算符

PHP支持可变参数的扩展运算符.

在JavaScript中,您可以使用spread运算符来执行此操作:

var a = [1, 2];
var b = [...a, 3, 4];
console.log(b); // [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但是,尝试在PHP中执行此操作:

$a = [1, 2];
$b = [...$a, 3, 4];
var_dump($b);die;
Run Code Online (Sandbox Code Playgroud)

结果出现此错误:

解析错误:语法错误,意外'...'(T_ELLIPSIS),期待']'

在PHP中不允许使用这种方式使用扩展运算符吗?如果是这样,是否有同样优雅的方式来达到同样的效果?

php arrays variadic-functions spread-syntax

22
推荐指数
4
解决办法
2万
查看次数

varargs和重载的错误?

Java varargs实现中似乎存在一个错误.当方法使用不同类型的vararg参数重载时,Java无法区分适当的类型.

它给了我一个错误 The method ... is ambiguous for the type ...

请考虑以下代码:

public class Test
{
    public static void main(String[] args) throws Throwable
    {
        doit(new int[]{1, 2}); // <- no problem
        doit(new double[]{1.2, 2.2}); // <- no problem
        doit(1.2f, 2.2f); // <- no problem
        doit(1.2d, 2.2d); // <- no problem
        doit(1, 2); // <- The method doit(double[]) is ambiguous for the type Test
    }

    public static void doit(double... ds)
    {
        System.out.println("doubles");
    }

    public static void doit(int... is)
    {
        System.out.println("ints"); …
Run Code Online (Sandbox Code Playgroud)

java overloading variadic-functions

21
推荐指数
2
解决办法
3856
查看次数

Scala中函数对象的varargs出错?

为什么这不起作用?

val f = (args: Int*) => args.sum

error: ')' expected but identifier found.
val f = (args: Int*) => args.sum
                  ^
Run Code Online (Sandbox Code Playgroud)

然而,这非常好

def sum(args: Int*) = args.sum
val f = sum _
Run Code Online (Sandbox Code Playgroud)

这样做

val f: (Int*) => Int = args => args.sum
Run Code Online (Sandbox Code Playgroud)

顺便说一句.我正在使用scala 2.9.1

syntax scala variadic-functions

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

为什么不是C#的Math.Min/Max可变参数?

我需要找到3个值之间的最小值,我最终做了这样的事情:

Math.Min(Math.Min(val1, val2), val3)
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎有点傻,因为其他语言使用可变函数.我非常怀疑这是一个疏忽.

有什么理由说明简单的Min/Max函数不是变量的吗?是否有性能影响?有没有我没注意到的可变版本?

c# variadic-functions

21
推荐指数
2
解决办法
3230
查看次数

如何将arrayList的元素传递给variadic函数

我有一个填充了元素的arrayList.我想将该数组列表的元素作为参数传递给可变参数函数.

我的功能

public SequenceEntityModifier(final IEntityModifier... pEntityModifiers)
Run Code Online (Sandbox Code Playgroud)

我的ArrayList

ArrayList<IEntityModifier> arr = new ArrayList<IEntityModifier>();
arr.add(new MoveXModifier(1, 50, 120));
arr.add(new MoveXModifier(1, 120, 50));
Run Code Online (Sandbox Code Playgroud)

我想将它传递给函数,好像我会单独传递它们一样.

new SequenceEntityModifier( /* elements of arr here */ );
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

提前致谢.

java collections variadic-functions andengine

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

如何处理Scheme中未指定数量的参数?

例如,((fn-stringappend string-append) "a" "b" "c") 我知道如何处理这个问题(f x y z).但是,如果参数数量未知,该怎么办?有没有办法处理这类问题?

scheme variadic variadic-functions

21
推荐指数
2
解决办法
2万
查看次数

Varargs在Java中的方法重载

以下代码无法编译.

package varargspkg;

public class Main {

    public static void test(int... i) {
        for (int t = 0; t < i.length; t++) {
            System.out.println(i[t]);
        }

        System.out.println("int");
    }

    public static void test(float... f) {
        for (int t = 0; t < f.length; t++) {
            System.out.println(f[t]);
        }

        System.out.println("float");
    }

    public static void main(String[] args) {
        test(1, 2);  //Compilation error here quoted as follows.
    }
}
Run Code Online (Sandbox Code Playgroud)

发出编译时错误.

对于测试的引用是不明确的,varargspkg.Main中的方法test(int ...)和varargspkg中的方法test(float ...)匹配

这似乎是显而易见的,因为在方法调用的参数值test(1, 2);可以提升int以及float

如果任何一个或两个参数后缀为Ff,则编译.


但是,如果我们使用相应的包装器类型表示方法签名中的接收参数,如下所示 …

java overloading variadic-functions java-6

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