请考虑以下情形: 我有一个课程测试
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(...)
函数?
答案 0 :(得分:6)
中缀符号是关于它使用方式的语法。它适用于左侧的对象和右侧的参数。
使用with
时,左侧不再有对象标记,因此中缀表示法的特殊语法不再有效。你必须回到常规函数表示法。
答案 1 :(得分:1)
此限制对于解析器解析代码而不与其他语法冲突是必需的。