Issue
I use Code A as shown below frequently.
Unfortunately, I can't understand the syntax structure for private set completely, so I get the following error when I replace Code A with Code B.
Function invocation 'set(...)' expected
What is the full syntax structure for private set in Kotlin?
Code A
var isRecording by mutableStateOf(false)
private set
Code B
var isRecording by mutableStateOf(false) private set
Solution
This is the relevant grammar, from 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
;
My take on it is that the new line is needed because otherwise it assumes the private set is part of the expression in the propertyDelegate.
And indeed, it is actually possible to write a functional one-liner where the private set is part of the expression. this is correct functional code:
val set = 0
var isRecording by mutableStateOf(false) private set
public infix fun <A, B> A.private(that: B): A = this
But I would highly recommend to never write such code haha.
Answered By - Ivo Beckers
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.