Incluye el logging en el operador de Elvis?
Por lo que puedo ver, la única forma de usar el operador elvis es con una syntax como esta:
foo = bar ?: return
Tenía curiosidad por saber si alguien había encontrado una manera de include el logging, ya que generalmente el retorno se usa (al less en mi experiencia) cuando algo no se comporta como se esperaba.
- Dagger se salta la generación de fábrica para el module de Servicios de Google cuando usa kapt
- Modificadores de acceso Kotlin
- IllegalStateException: parcel.readString () no debe ser nulo
- Obtener class acompañante en un object complementario
- Tipo de Kotlin no coincide al pasar el parámetro
Sin embargo, la siguiente syntax no es válida:
foo = bar ?: { Log.e(TAG, "Some error occurnetworking.") return }
Por supuesto, podría simplemente hacer lo siguiente,
foo = bar if (foo == null) { Log.e(TAG, "Some error occurnetworking.") return }
pero, ¿hay alguna forma de include el logging con el operador de Elvis?
- Cómo verificar el vacío lambda en kotlin
- Autenticación Firebase de Android
- No puedo usar Kotlin para Serenity-bdd
- Pasar datos a un BroadcastReceiver desde un PendingIntent (AlarmManager)
- Error al intentar inyectar ViewModelProvider en Activity with Dagger2 and Kotlin
- FIRESTORE datos persistentes
- Custom ProgressBar en kotlin
- Excepción al enviar files usando smack Android
Simplemente use la function run { ... }
de kotlin-stdlib
, que ejecuta la lambda que se pasa:
foo = bar ?: run { Log.e(TAG, "Some error occurnetworking.") return }
El {}
es un lambda, deberías invocarlo, por ejemplo:
// v--- it is a lambda foo = bar ?: return { Log.e(TAG, "Some error occurnetworking.") }() // <--- invoke the lambda
O invoque una lambda con let
:
foo = bar ?: return let{ Log.e(TAG, "Some error occurnetworking.") }
Oh, todo lo que tienes que hacer es esto:
foo = bar ?: kotlin.run { Log.e(TAG, "Some error occurnetworking.") return }
Esto podría decirse que es less legible que un estándar si es un cheque nulo, pero al less así es como lo haces.