【问题标题】:Passing a Closure as an Argument to another Function won't work将闭包作为参数传递给另一个函数不起作用
【发布时间】:2015-11-30 07:29:56
【问题描述】:

我有一个函数evaluate 接受参数。第一个参数是Int。闭包的第二个参数接受 Int 并返回 Double。函数evaluate 然后返回一个[Double]。返回数组的第 k 个元素是计算第二个参数的结果,其值为 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]

【问题讨论】:

  • 谢谢!!! @Filburt 很抱歉给您带来麻烦

标签: functional-programming swift2 xcode7-beta6


【解决方案1】:

myFunction: 标签丢失。您拨打evaluate 应该是:

evaluate(5, myFunction: polyTableClosure)

此外,访问索引i 处的空数组不会在该索引处创建新槽。它会失败。

你必须追加到数组中:

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

【讨论】:

  • 是的,问题是 {doubles[i] = myFunction(i)}。我不必以这种方式明确地这样做 {evaluate(5, myFunction: polyTableClosure)}。这是 {print(evaluate(5, polyTableClosure))} 工作正常。非常感谢!!!我为此拉了一个小时的头发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多