Kotlin 中私有集的完整语法结构是什么?

What is the full syntax structure for private set in Kotlin?

我经常使用 代码 A,如下所示。

不幸的是,我无法完全理解 private set 的语法结构,所以当我将 Code A 替换为 时出现以下错误代码 B.

Function invocation 'set(...)' expected

Kotlin 中 private set 的完整语法结构是什么?

代码A

var isRecording by mutableStateOf(false)
               private set

代码 B

var isRecording by mutableStateOf(false)  private set

这是相关语法,来自https://kotlinlang.org/docs/reference/grammar.html :

propertyDeclaration (used by declaration)
  : modifiers? ('val' | 'var') typeParameters?
    (receiverType '.')?
    (multiVariableDeclaration | variableDeclaration)
    typeConstraints?
    (('=' expression) | propertyDelegate)? ';'?
    ((getter? (semi? setter)?) | (setter? (semi? getter)?))
  ;
propertyDelegate (used by propertyDeclaration)
  : 'by' expression
  ;

我的看法是需要新行,否则它会假定 private setpropertyDelegateexpression 的一部分。

事实上,实际上可以编写函数 one-liner,其中 private set 是表达式的一部分。这是正确的功能代码:

val set = 0

var isRecording by mutableStateOf(false) private set

public infix fun <A, B> A.private(that: B): A = this

但是我强烈建议永远不要写这样的代码哈哈。