中缀函数:如何避免在提供的参数周围使用括号

infix function: how to avoid parentheses around supplied argument

我有以下中缀乐趣

infix fun <T> Boolean.then(lazyValue: () -> T): T?
        = if (this) lazyValue() else null

具有以下用例

(index > 0) then { data[index - 1].id }

我想改写为

index > 0 then { data[index - 1].id }

并避免在索引 > 0 周围使用括号。目前它无法在代码中解析。 有什么办法让它起作用吗?

不,那行不通。

根据 Kotlin 语法参考中的 operator precedence table,中缀函数调用的优先级,例如您的 then,高于比较运算符 <>, <=, >=.

所以没有括号,像 index > 0 then { ... } 这样的表达式会像 index > (0 then { ... }) 一样被解析,而不是相反。