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

不幸的是,我不能完全理解private set的语法 struct ,所以当我用代码B替换代码A时,我得到了以下错误.

函数调用"set(…)"预期

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

代码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的一部分.

事实上,在private set是表达式的一部分的情况下,实际上可以编写一个函数单行程序.这是正确的功能代码:

val set = 0

var isRecording by mutableStateOf(false) private set

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

但我强烈建议不要写这样的代码哈哈.

Kotlin相关问答推荐

使用数据存储首选项Kotlin Jetpack Compose

Kotlin:类型不匹配:推断的类型已运行,但应等待

init中的NPE抽象函数变量

如何在 Kotlin 中将with代码转换为完整代码?

如何判断给定字符串是否多次包含另一个子字符串?

kotlin 如何决定 lambda 中的参数名称?

使用 Kotlin 协程时 Room dao 类出错

Moshi:解析单个对象或对象列表(kotlin)

Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别

致命错误 LifecycleOwners 必须在 registerForActivityResult 开始之前调用 register

将 @Component.Builder 与构造函数参数一起使用

是否在Kotlin中重写enum toString()?

如何在Kotlin中使用ViewModelProviders

用Gradle Kotlin DSL构建源jar?

在kotlin中初始化类变量的正确位置是什么

递归方法调用在 kotlin 中导致 StackOverFlowError 但在 java 中没有

Kotlin中的嵌套let块

如何在 firebase 数据库中使用 kotlin 协程

Kotlin 中的填充字符串

Kotlin:如何使用扩展函数扩展枚举类