2015-10-30 21 views
11

Czasami nie używam wszystkich parametrów lambda, jak drugi parametr w poniższym przykładzie, który jest stara wartość w przypadku zmiany:Jak pominąć parametry lambda w Kotlin?

selected.onChange { value, _ -> 
    checkBox.isChecked = value 
} 

Jak mogę je pominąć? Powoduje, że zaśmieca kod i rani czytelność. Poprzednio użyłem powyższej metody, ale w kotlinach są zarezerwowane podkreślenia 1.0.0-beta-1103.

+5

Aktualnie nie – Yaroslav

+4

może jeśli używasz lambda często na tyle, aby to zagwarantować, zawsze możesz dodać funkcję rozszerzenia, która robi to samo z parametrami, których nie chcesz usunąć. – eski

Odpowiedz

4

Można użyć escaping for Java identifiers that are keywords in Kotlin (to jest odcisków) lub przeciążenia onChange.

backticks

selected.onChange { value, `_` -> 
    checkBox.isChecked = value 
} 

przeciążeniowe onChange

interface Listener<T1, T2> { 
    fun onChange(f: (T1, T2) -> Unit) // original method 
    fun onChange(f: (T1) -> Unit)  // new method 
} 

A jeśli nie można zmienić Listener<T1, T2> (lub niezależnie od typu settable jest ze swojego przykładu), wówczas można użyć extension function:

fun <T1, T2> Listener<T1, T2>.onChange(f: (T1) -> Unit) = onChange { t1, t2 -> f(t1) } 

Można połączyć onChange jak chcesz:

selected.onChange { value -> 
    checkBox.isChecked = value 
} 
Powiązane problemy