konf icon indicating copy to clipboard operation
konf copied to clipboard

lazySet is not triggering update events

Open xmlking opened this issue 3 years ago • 2 comments

val handler = Account.maxRetry.onSet { value -> println("the maxRetry has changed to $value") }
val handler2 = Account.maxRetry.beforeSet { config, value -> println("the maxRetry will change to $value") }
val handler3 = config.beforeSet { item, value -> println("${item.name} will change to $value") }

val maxRetry by config.property(Account.maxRetry)
println(maxRetry)
config.lazySet(Account.maxRetry) { 4 }
println(maxRetry)
config[Account.maxRetry] = 6
println(maxRetry)
3
4
the maxRetry has changed to 6
the maxRetry will change to 6
maxRetry will change to 6
6

xmlking avatar May 23 '21 16:05 xmlking

@xmlking It is difficult to decide how lazySet triggers onSet.

  • If we trigger onSet when config.lazySet(Account.maxRetry) { 4 }, we have to evaluate { 4 }, which may be an expansive/non-deterministic calculation.
  • If we trigger onSet when println(maxRetry), we have to trigger for every get operation of maxRetry.

Maybe the better solution is to add a new onLazySet API.

Which solution do you prefer?

uchuhimo avatar May 23 '21 16:05 uchuhimo

This issue has been automatically marked as stale because it has not had recent activity. It will be closed after 30 days if no further activity occurs, but feel free to re-open a closed issue if needed.

stale[bot] avatar Apr 16 '22 05:04 stale[bot]