Kotlin: Force inline metode for å bevare mengden av definerte linjer

stemmer
0

Så jeg har denne metoden som jeg vil bruke for logging og samtidig returnere logget objekt:

inline fun <T> T.btwLog(prefix:String=)=apply { Timber.d($prefix->${toString()}) }

Timber klassen er fra en logging bibliotek og også (når satt opp på denne måten) viser linjen som den ble kalt, som også er grunnen til at metoden er inline (for å vise linjen og riktig klasse hvor det ble kalt) For eksempel :

val b = someThingComplex().btwLog()

Dette utgangspunktet fungerer, det eneste problemet er at linjenummer er galt. Dette har i utgangspunktet å være fordi Kotlin setter fremgangsmåten og mens de gjør det legger noen linjer til den klasse (4) ?.

Så eksempelet fra før trolig ser slik ut:

val b = someThingComplex()
        .apply { 
        Timber.d($prefix->${toString()})
        }

Et alternativ er denne metode hvor Kotlin ikke tilfører flere linjer:

inline fun Any.log(s:String=)= Timber.d(s+this)

Er det noen måte jeg kan tvinge Kotlin å bare inline det akkurat som jeg skrev det og ikke legge linjeskift og sånt? Eller er det en bedre måte at jeg kunne definere metoden generelt?

Takk.

Publisert på 14/01/2020 klokken 00:02
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Jeg mistenker at forskyvning av linjenumre kan skyldes kallet til apply. Prøv det på denne måten.

inline fun <T> T.btwLog(prefix: String = ""): T {
    Timber.d(prefix + "->" + this)
    return this
}
Svarte 14/01/2020 kl. 01:16
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more