Kotlin: Erzwingen inline-Verfahren, die Menge an definierten Linien zu erhalten,

stimmen
0

Also ich habe diese Methode, dass ich für die Anmeldung verwendet werden soll, während auch das Objekt angemeldet Rückkehr:

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

Die Holzklasse ist aus einer Logging-Bibliothek und auch (wenn auf diese Weise eingerichtet) zeigt die Linie, an der es hieß, die auch, warum die Methode inline ist (die Linie zu zeigen und richtige Klasse von wo es genannt wurde), zum Beispiel :

val b = someThingComplex().btwLog()

Diese im Grunde funktioniert, das einzige Problem ist, dass die Zeilennummer falsch ist. Dies hat im Grunde sein, weil Kotlin die Methode fügt und während Sie fügt so ein paar Zeilen zu der Klasse (4) ?.

So das Beispiel aus, bevor das sieht wahrscheinlich ähnlich:

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

Eine Alternative ist das Verfahren, bei dem Kotlin keine zusätzliche Zeilen hinzu:

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

Gibt es eine Möglichkeit, dass ich es Kotlin nur Inline genau zwingen könnte, wie ich es geschrieben habe und nicht die Zeilenumbrüche und Material addiere? Oder gibt es eine bessere Art und Weise, dass ich die Methode im allgemeinen definieren könnte?

Vielen Dank.

Veröffentlicht am 14/01/2020 um 00:02
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Ich vermute , dass die Verschiebung der Zeilennummern könnte auf den Anruf fällig apply. Versuchen Sie es auf diese Weise.

inline fun <T> T.btwLog(prefix: String = ""): T {
    Timber.d(prefix + "->" + this)
    return this
}
Beantwortet am 14/01/2020 um 01:16
quelle vom benutzer

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