Kotlin: Force inline methode om de hoeveelheid gedefinieerde lijnen behouden

stemmen
0

Dus ik heb deze methode die ik wil gebruiken voor het loggen, terwijl ook de ingelogde object retour:

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

De Hout klasse van een logging bibliotheek en ook (wanneer op deze manier) toont de lijn waarop het werd genoemd, dat is ook de reden waarom de werkwijze inline Bijvoorbeeld (de lijn en correcte klasse waar het werd genoemd tonen) :

val b = someThingComplex().btwLog()

Dit werkt in principe, het enige probleem is dat de lijn nummer is verkeerd. Dit heeft in principe te zijn omdat Kotlin voegt de methode en terwijl dit te doen voegt een aantal lijnen naar de klasse (4) ?.

Dus het voorbeeld van vóór waarschijnlijk ziet er ongeveer zo uit:

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

Een alternatief is deze methode waarbij Kotlin geen extra regels toevoegen:

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

Is er een manier die ik Kotlin gewoon inline het precies kunnen dwingen zoals ik schreef het en niet linebreaks en dat soort dingen toe te voegen? Of is er een betere manier dat ik de methode in het algemeen zou kunnen definiëren?

Bedankt.

De vraag is gesteld op 14/01/2020 om 00:02
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Ik vermoed dat het verschuiven van de lijn nummers als gevolg van de oproep om zou kunnen zijn apply. Probeer het op deze manier.

inline fun <T> T.btwLog(prefix: String = ""): T {
    Timber.d(prefix + "->" + this)
    return this
}
antwoordde op 14/01/2020 om 01:16
bron van user

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