首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实例方法是闭包吗?

实例方法是闭包吗?
EN

Stack Overflow用户
提问于 2016-11-04 02:51:14
回答 1查看 106关注 0票数 1

在"Swift编程语言3.0“一书中,它提到了以下类型的闭包:

全局函数是具有名称且不捕获任何值的闭包。 嵌套函数是具有名称的闭包,可以从其封闭函数中捕获值。 闭包表达式是以轻量级语法编写的未命名闭包,可以从其周围的上下文中捕获值。

我只是想知道,类范围中存在的函数是否算作闭包?一个人当然可以把这样的函数作为一个参数传递给其他函数,但这是一个闭包吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-04 03:22:49

是!绝对一点儿没错!下面是一个使用lowercased()方法String的示例。

代码语言:javascript
复制
let aClosure: (String) -> () -> String = String.lowercased


let anUpperCasedString = "A B C"
print(anUpperCasedString)

let aLowerCaseString = aClosure(anUpperCasedString)()
print(aLowerCaseString)

您可以看到这个闭包的类型是(String) -> () -> String。这是因为String.lowercased完全不被应用,它不知道它在操作什么实例。

调用aClosure(anUpperCasedString)将返回一个现在为() -> String的闭包。它将在其中运行的实例。只有在调用这个没有params的新闭包(())时,它才会实际执行lowercased()的主体,对上一步提供的实例进行操作,并返回String结果。

因此,这也是有效的:

代码语言:javascript
复制
let aLowerCaseString = String.lowercased("QWERTY")()

它只是在一个内联的步骤中完成上面的所有步骤。

这一技术被称为函数运行。这个职位更多地讨论了这种技术(称为函数运行),因为它适用于Swift中的实例方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40414536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档