gpt4 book ai didi

swift - 模式变量绑定(bind)不能出现在表达式中

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:44 26 4
gpt4 key购买 nike

我一直在看 Apple 提供的 The Swift Programming Language 指南。以下示例来自本书:

class HTMLElement {
let name :String;
let text: String?;

@lazy var asHTML : () -> String = {
if let text = self.text {
return "<\(self.name)>\(self.text)</\(self.name)>";
} else {
return "<\(self.name) />"
}
}
}

我错误地写了如下闭包:

    @lazy var asHTML : () -> String = {
if (let text = self.text) {
return "<\(self.name)>\(self.text)</\(self.name)>";
} else {
return "<\(self.name) />"
}
}

注意 let text = self.text 和编译器提示的括号:

Pattern variable binding cannot appear in an expression

只是想知道 Pattern Variable Binding 是什么意思,为什么它不能出现在表达式中?

最佳答案

“模式变量绑定(bind)”是您正在做的事情,即在某些代码中间使用 let,而不是在文件、枚举、结构或类的顶层作为声明常量变量的方法。

使它成为表达式的是括号。您已将“let”表达式从其周围环境中分离出来,并要求将其作为表达式单独求值。但你不能那样做:你不能随便说“让”。

另一种看待它的方式很简单:if let 是一个固定的有意义的模式,其中条件是一个 Optional 被评估为常量以在 if 代码中使用。括号打破了模式。

该模式称为绑定(bind),因为您是在非常临时和局部的情况下定义此名称,即仅向下进入 if 代码。我认为它可以追溯到 LISP(至少,那是我过去以这种方式使用“let”的地方)。

关于swift - 模式变量绑定(bind)不能出现在表达式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24051142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com