【发布时间】:2015-08-07 06:01:54
【问题描述】:
以下哪个更好:
样本1:
var x: Int = 0
for _ in 1...5 {
someList.append( Foobar(someClosure: { println("X = \(x)") }))
}
样本2:
var x: Int = 0
var c: ()->() = { println("X = \(x)") }
for _ in 1...5 {
someList.append( Foobar(someClosure: c))
}
- 如果我将闭包视为引用类型,那么 sample2 将是最好的,因为我正在重用同一个对象(减少内存分配,重用对象)。
- 如果我认为闭包是值类型,那么它真的没关系。我必须相信编译器能够识别闭包是相同的,并且它知道使用相同的闭包(类似于我在多个位置的代码中使用相同的文字字符串会发生的情况)。选择其中一个将被视为“过早的优化”。
编辑:
这两个样本之间是否存在根本区别(除了写作风格)?
【问题讨论】:
-
什么更好?这与在调用参数时询问创建
Int变量或使用文字值没有任何不同。可以说,在第一个示例中,您使用的是“闭包文字”,而在第二个示例中,您使用的是闭包变量。 -
@nhgrif 然后我想我是在问是否存在“闭包文字”之类的东西。在我看来,它们是否存在并不明显。它真的对闭包有影响吗?