關於Kotlin擴充套件函式與lambda的上下文

2021-09-11 14:26:42 字數 713 閱讀 5075

通常我們在寫乙個擴充套件函式,如果傳入乙個lambda表示式大概是下面這樣

inline

fun(block: ()

-> unit)

複製**

這個時候它的上下文是誰呢?

在擴充套件的方法內部,這個方法的上下文其實就是這個t,也就是呼叫這個方法的物件,所以this == t,這一點很明顯。

那麼在外部使用的時候,如下**中呢?

//這裡的上下文是誰呢?

}複製**

inline

fun(block: t.()

-> unit)

複製**

這裡可以看到我給把這個lambda變成了t.()->unit,表示它是t的乙個擴充套件方法。既然這個lambda一家是t的乙個擴充套件方法了,那麼他內部的上下文自然就是這個t了。所以就可以有了如下的寫法。

text = "hellodsl"

textsize = 16.sp2px()

}複製**

inline

fun(block: t.()

-> unit): t

複製**

text = "hellodsl"

textsize = 16.sp2px()

}複製**

那麼這個東西有什麼用處呢? 有了它就可以輕鬆寫出乙個dsl啦~

Kotlin擴充套件函式

摘自官網解釋 kotlin 可以對乙個類的屬性和方法進行擴充套件,且不需要繼承或使用 decorator 模式 擴充套件是一種靜態行為,對被擴充套件的類 本身不會造成任何影響 fun receivertype.functionname params fun float.topx float注 建立這...

kotlin類與物件 擴充套件

1,擴充套件概念 oc中早期就有此功能 kotlin 能夠擴充套件乙個類的新功能而無需繼承該類或者使用像裝飾者這樣的設計模式。這通過叫做 擴充套件 的特殊宣告完成。例如,你可以為乙個你不能修改的 來自第三方庫中的類編寫乙個新的函式。這個新 增的函式就像那個原始類本來就有的函式一樣,可以用普通的方法呼...

Kotlin 六 Anko和擴充套件的函式

anko是jetbrains開發的乙個強大的庫。它主要的目的是用來替代以前xml的方式來使用 生成ui布局,anko包含了很多的非常有幫助的函式和屬性來避免讓你寫很多的模版 乙個anko擴充套件函式可以被用來簡化獲取乙個recyclerview 原始的寫法 val mrecyclerview fin...