将闭包作为参数传递给另一个函数将不起作用

问题描述:

我有一个函数evaluate需要参数。第一个参数是Int。关闭的第二个参数需要Int并返回Double。功能evaluate然后返回[Double]。返回数组的第i个元素是对值k评估第二个参数的结果,其中k = 0,1,...,n将闭包作为参数传递给另一个函数将不起作用

func evaluate(n: Int, myFunction: Int -> Double) -> [Double] { 
    var doubles = [Double]() 
    for i in 1...n { 
     doubles[i] = myFunction(i) 
    } 

    return doubles 
} 

let polyTableClosure: Int -> Double = { return Double($0 * $0 * $0 + 2 * $0 + 4) } 

print(evaluate(5, polyTableClosure)) 

期待这样的:[7, 16, 37, 76, 139]

+0

谢谢! @Filburt对不起 –

myFunction:标签丢失。您的通话evaluate应该是:

evaluate(5, myFunction: polyTableClosure) 

此外,在指数i访问一个空数组不会创建索引新插槽。它会失败。

您必须追加到数组:

for i in 1...n { 
    doubles.append(myFunction(i)) 
} 
+0

是的问题是{双打[我] = myFunction(我)}。我不必这样明确地做(评估(5,myFunction:polyTableClosure)}。这是{打印(评估(5,polyTableClosure))}工作正常。非常感谢!!!我在这上面拉了一小时头发。 –