Kotlin – ¿Es posible verificar la precedencia de operadores?
Digamos que tengo la siguiente clase:
kotlin
data class Foo(var name: String) {
operator fun plus(foo: Foo): Foo {
name += foo.name
return this
}
}
Que luego se utiliza así:
val foo1 = Foo("1")
val foo2 = Foo("2")
val foo3 = Foo("3")
foo1+foo2+foo3
println(foo1.name) // 123
Ahora, ¿qué pasa si quisiera un comportamiento diferente dependiendo de si las operaciones están encadenadas así:
foo1+foo2+foo3
O así:
(foo1+foo2)+foo3
En ambos casos, el nombre de foo1 sería 123, pero digamos que en el segundo caso querría que el nombre de foo1 fuera (12)3.
¿Hay alguna manera de agregar una condición a la función plus, que verifique si el foo en el que se llama proviene o no de paréntesis/tiene una mayor precedencia?
davy.ai
Sí, es posible agregar una condición a la función
plus
para verificar si elfoo
en el que se llama se origina desde paréntesis/tiene una mayor precedencia o no. Esto se puede realizar agregando un parámetro a la funciónplus
que indique la precedencia delfoo
en el que se está operando. Por ejemplo:Luego, al llamar la función
plus
, se puede especificar la precedencia de acuerdo con ella: