2017-02-27 25 views
7

records yayın/koleksiyon ve extract veriyi, bu tür bir koleksiyonun bir öğesini dönüştüren bir işlevdir.Kotlin işlev referansı

explicitely (it) uygulamadan

records.map {extract(it)} 

yazmak için KOTLIN bir yolu var mı?

E.g. Yöntem başvurusunu (Java'ya benzer) kullanabilirsiniz (records.map(extract) veya

cevap

10
  • dair örnekler başvuran almak ve R, daha sonra doğrudan doğruya map:

    Örnek:

    val upperCaseReverse: (String) -> String = { it.toUpperCase().reversed() } 
    
    listOf("abc", "xyz").map(upperCaseReverse) // [CBA, ZYX] 
    
  • extract bir üst düzey tek argüman fonksiyon ya da yerel bir tek argüman fonksiyonu ise, make a function reference as ::extract can ve map iletecek:

    records.map(::extract) 
    

    Örnek :

    fun rotate(s: String) = s.drop(1) + s.first() 
    
    listOf("abc", "xyz").map(::rotate) // [bca, yzx] 
    
  • SomeClass bağımsız değişkenleri veya SomeClass özelliğinin kabul edilmediği bir sınıfın bir üyesi veya uzantı işlevi ise, SomeClass::extract olarak kullanabilirsiniz. Bu durumda, records, extract için alıcı olarak kullanılacak SomeType öğelerini içermelidir.

    records.map(SomeClass::extract) 
    

    Örnek: KOTLIN 1 yana

    fun Int.rem2() = this % 2 
    
    listOf("abc", "defg").map(String::length).map(Int::rem2) // [1, 0] 
    
  • .1, extract üye ya da bir argüman kabul bir sınıf SomeClass bir uzantı işlevi ise, bir alıcı foo ile make a bound callable reference olabilir:

    records.map(foo::extract) 
    records.map(this::extract) // to call on `this` receiver 
    

    Örnek:

    listOf("abc", "xyz").map("prefix"::plus) // [prefixabc, prefixxyz] 
    

(runnable demo with all the code samples above)

1

.

records.map {::extract} 

extract bazı T için fonksiyonel tip (T) -> R veya T.() -> R değeri (yerel değişken, özellik, parametresi) ise fonksiyonuna bir göz KOTLIN docs https://kotlinlang.org/docs/reference/reflection.html#function-references

+4

Bu kod, amaçlandığı şeyi yapmaz. Kayıtların her bir öğesi, işlev referansına eşlenecek ve N özdeş öğelerinin bir listesini alacaksınız: :: ekstresi. – hotkey