一种带有{}()的脱胎闭合?

时间:2015-09-02 19:36:33

标签: swift variables initialization

我看到变量初始化代码的示例,可以包含任意数量的语句,例如:

var _globalCounter = 0
let instanceCount: Int = { _globalCounter++ }()
print(instanceCount.dynamicType) // Int

和完整的代码示例:

struct User {
    let name: String
    let company: String
    let login: String
    let password: String        

    static let database: Dictionary<String, User> = {
        var theDatabase = Dictionary<String, User>()
        for user in [
            User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
            User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
            User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
        ] {
            theDatabase[user.login] = user
        }
        return theDatabase
    }()
}

发生了什么事?它是从一个闭包赋值,比如从函数调用中赋值吗?

这些样本是从cs 193p 2014年秋季课程复制的,与在init中放入内容相比,这些被认为是复杂变量初始化方面的良好实践吗?

请注意,在第二个示例中,变量是静态的,所以这是一个线程安全的初始化代码吗?

我是#learning swift和#confused。

1 个答案:

答案 0 :(得分:3)

是的,闭包只是一个功能。与任何其他函数一样,您可以通过传入括号内的参数来调用它。如果它是一个不带参数的函数,那么用空括号调用它。

library(dplyr)
myDF %>% 
  mutate_each(funs(./lag(.))) %>%
  cbind(myDF, .)
#   a         b        a        b
# 1 1  3.000000       NA       NA
# 2 2  7.333333 2.000000 2.444444
# 3 3 11.666667 1.500000 1.590909
# 4 4 16.000000 1.333333 1.371429

实际上就这么简单:)