中缀函数:如何避免在提供的参数周围使用括号
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 { ... })
一样被解析,而不是相反。
我有以下中缀乐趣
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 { ... })
一样被解析,而不是相反。