标签: variadic-functions

如何将Scala数组传递给Scala vararg方法?

请考虑以下代码:

private def test(some:String*){

}

private def call () {
  val some = Array("asd", "zxc")
  test(some)
}
Run Code Online (Sandbox Code Playgroud)

它打印expect String, found Array[String]为什么?Scala varargs不是数组吗?

注意

我在Stack Overflow上发现了几个关于Scala varargs的问题,但所有这些问题都是关于调用Java varargs方法或将Scala列表转换为数组.

arrays scala variadic-functions

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

如何在Objective-C中创建变量参数方法

也许这对你们大多数人来说显然都很简单,但是请你举个例子来说明如何创建类似的方法(在Objective-C中)和C中的函数来创建像NSStrings stringWithFormat:或者类似的函数NSLog().

提醒一下:

[NSString stringWithFormat:@"example tekst %i %@ %.2f", 122, @"sth", 3.1415"];
NSLog(@"account ID %i email %@", accountID, email);
Run Code Online (Sandbox Code Playgroud)

我想创建类似NSString的方法stringWithFormat:,NSURL - urlWithFormat.

format null xcode objective-c variadic-functions

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

将列表作为varargs传递

我有一个List<Thing>,我想将它传递给声明的方法doIt(final Thing... things).有没有办法做到这一点?

代码看起来事情是这样的:

public doIt(final Thing... things)
{
    // things get done here
}

List<Thing> things = /* initialized with all my things */;

doIt(things);
Run Code Online (Sandbox Code Playgroud)

该代码显然不能因为工作doIt()需要Thing不能List<Thing>.

有没有办法传入List作为varargs?

这是在Android应用程序中,但我不明白为什么该解决方案不适用于任何Java

java android list variadic-functions

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

va_end究竟是什么?是否总是需要打电话给它?

va_end- 要重置的宏arg_ptr.

访问变量参数列表后,arg_ptr通常会重置指针va_end().我知道如果你想重新迭代这个列表是必需的,但如果你不去,它是否真的需要?这只是一种很好的做法,就像"永远拥有default:你的switch" 这一规则一样吗?

c c++ variadic-functions

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

从技术上讲,可变函数如何工作?printf如何工作?

我知道我可以va_arg用来编写自己的可变参数函数,但是可变函数如何在引擎盖下工作,即在汇编指令级别?

例如,如何printf采用可变数量的参数?


*没有例外的规则.没有语言C/C++,但是,这两个问题都可以解答

*注意:最初给出的答案如何输出printf函数可以输出数字中的可变参数?,但它似乎不适用于提问者

c c++ variadic-functions

56
推荐指数
2
解决办法
5342
查看次数

printf的h和hh修饰符的用途是什么?

除了%hn%hhn(指定hhh指定指向对象的大小),格式说明符的hhh修饰符有printf什么意义?

由于标准要求的默认促销适用于可变函数,因此不可能将类型charshort(或其任何有符号/无符号变体)的参数传递给printf.

根据7.19.6.1(7),h修饰符:

指定以下d,i,o,u,x或X转换规范适用于short int或unsigned short int参数(该参数将根据整数提升进行提升,但其值应转换为short int或打印前的unsigned short int); 或者后续的n转换规范适用于指向short int参数的指针.

如果参数实际上是类型shortunsigned short,则促销int后转换回shortunsigned short将产生与促销相同的int而不进行任何转换.因此,对于类型的参数shortunsigned short,%d,%u等应给予相同的结果到%hd,%hu等.(并且同样地对于char类型和hh).

据我所知,h或者hh修饰符可能有用的唯一情况是当参数将其传递int到范围之外时,short或者unsigned short …

c printf promotions variadic-functions format-specifiers

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

ES2015/ES6中的Spread语法与Rest参数

我对ES2015中的spread语法和rest参数感到困惑.任何人都能用适当的例子来解释它们之间的区别吗?

javascript variadic-functions ecmascript-6 spread-syntax

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

使用Scala的varargs

我正试图弄清楚如何做以下事情:

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, o :: List(os:_*)) )
}
Run Code Online (Sandbox Code Playgroud)

有一个原因,我必须单独声明方法o和一个os Seq.基本上,我最终得到了使用单个对象参数(类型List)调用的格式方法.尝试:

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, (o :: List(os:_*))).toArray )
}
Run Code Online (Sandbox Code Playgroud)

给我类型错误:

发现:数组[任意]

必需的Seq [java.lang.Object]

我尝试过编译,编译但失败的原因和第一个例子差不多.当我尝试

println(String.format(msg, (o :: List(os:_*)) :_* ))
Run Code Online (Sandbox Code Playgroud)

这无法使用隐式转换歧义进行编译(any2ArrowAssocany2stringadd)

scala variadic-functions

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

Arrays.asList()不能正常工作?

我有一个float [],我想得到一个具有相同元素的列表.我可以做一个又一个添加它们的丑陋的事情,但我想使用Arrays.asList方法.但是有一个问题.这有效:

List<Integer> list = Arrays.asList(1,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.

int[] ints = new int[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);
Run Code Online (Sandbox Code Playgroud)

asList方法接受一个varargs参数,对我来说,扩展是一个数组的"简写".

问题:

  • 为什么第二段代码返回List<int[]>但不返回List<int>.

  • 有没有办法纠正它?

  • 为什么自动装箱不在这里工作; 即int[]Integer[]

java arrays list variadic-functions

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

传递无参数或null时的Java 3点参数(varargs)行为

我试过这个并从JAVA得到奇怪的行为,有人可以帮我解释一下吗?

boolean testNull(String... string) {
    if(string == null) {
        return true;
    } else {
        System.out.println(string.getClass());
        return false;
    }
}

boolean callTestNull(String s) {
    return testNull(s);
}
Run Code Online (Sandbox Code Playgroud)

然后我有测试用例:

    @Test
    public void test_cases() {
        assertTrue(instance.testNull(null)); // NULL
        assertFalse(instance.testNull()); // NOT NULL
        assertFalse(instance.callTestNull(null)); // NOT NULL
    }
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果我打电话testNull()直接与参数null,我会true回来,但如果调用callTestNull()null,它调用testNull(),它告诉我该参数不为空,但空数组.

java ellipsis variadic-functions

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