中缀符号和 with(...) 无法按预期工作
Infix notation and with(...) does not work as I expected
考虑以下场景:
我有一个 class 测试
class Test() {
infix fun say(msg: String) = println(msg)
}
和一个主要方法
fun main(args: Array<String>) {
val test = Test()
test say "Hello World!" //Works
with(test) {
say "Goodbye World!" //Does not work
say("Hello again!") //Works
}
}
如您所见,我正在测试中缀表示法。考虑到 with(...)
允许您使用在 with 块中作为参数传递的对象
不必通过点表示法访问其成员,我希望中缀表示法像我在上面的示例中显示的那样工作。
不幸的是,这不起作用,这有什么不起作用的原因吗?这是一个错误还是仅仅是一个限制?或许我没有正确解释 with(...)
函数?
中缀表示法是关于其使用方式的语法。它与左侧的对象和右侧的参数一起工作。
使用 with
时,左侧不再有对象标记,因此中缀符号的特殊语法不再有效。您必须退回到常规函数符号。
此限制对于解析器在不与其他语法冲突的情况下解析代码是必需的。
考虑以下场景: 我有一个 class 测试
class Test() {
infix fun say(msg: String) = println(msg)
}
和一个主要方法
fun main(args: Array<String>) {
val test = Test()
test say "Hello World!" //Works
with(test) {
say "Goodbye World!" //Does not work
say("Hello again!") //Works
}
}
如您所见,我正在测试中缀表示法。考虑到 with(...)
允许您使用在 with 块中作为参数传递的对象
不必通过点表示法访问其成员,我希望中缀表示法像我在上面的示例中显示的那样工作。
不幸的是,这不起作用,这有什么不起作用的原因吗?这是一个错误还是仅仅是一个限制?或许我没有正确解释 with(...)
函数?
中缀表示法是关于其使用方式的语法。它与左侧的对象和右侧的参数一起工作。
使用 with
时,左侧不再有对象标记,因此中缀符号的特殊语法不再有效。您必须退回到常规函数符号。
此限制对于解析器在不与其他语法冲突的情况下解析代码是必需的。