我有一段非常简单的代码,它使用Swift语言中的Variadic Parameters。
我不明白为什么抱怨。不是双倍......等于[双]
我知道我可以像这样传递:printList(2,3,4,5)。
我猜Variadic与我的想法有所不同。您可以传递多个参数。这是关于没有传递集合的论据。
答案 0 :(得分:3)
如果要在函数中传递数组,请按照
进行操作func printList(numbers:[Double]){
}
let numbers = [Double](count: 5, repeatedValue: 0.0)
printList(numbers)
如果你想传递相同类型的输入,但数字未知,你可以这样做
func printList(numbers:Double...){
}
printList(0.0,0.0,0.0)
printList(0.0,1.0,2.0,3.0)
答案 1 :(得分:2)
您的声明
func printList (numbers:Double...) {}
期望传递给printList
的每个参数都是Double
。因此它被调用如下:
printList (1.0, 2.0, 3.0)
如果你这样调用它:
printList ([1.0, 2.0, 3.0], [4.0, 5.0])
然后你在printList
上调用[Double]
,而不是所需的Double
,因此编译器将标记该调用站点。
Swift中缺少的一个运算符是apply
(在Scheme和其他语言中称为),它接受一个函数和一个Sequence,并将seqeunce作为函数的单个参数进行解构。因此:
apply (printList, arguments: [1.0, 2.0, 3.0])
会'翻译'到:
printList (1.0, 2.0, 3.0)
重要,您当然可以将两个函数定义为:
func pL (numbers:Double...) { println (numbers) } // better, use pL(numbers)!
func pL (numbers:[Double]) { println (numbers) }
然后得到你想要的行为:
7> pL (1.0, 2.0)
[1.0, 2.0]
8> pL ([1.0, 2.0])
[1.0, 2.0]