36. n36ExtensionFunctionLiterals
擴充套件函式
fun task36(): List<Boolean> {
val isEven: Int.() -> Boolean = { this % 2 == 0 }
val isOdd: Int.() -> Boolean = { this % 2 != 0 }
return listOf(42.isOdd(), 239.isOdd(), 294823098.isEven())
}複製程式碼
37. n37StringAndMapBuilders
型別擴充套件函式,仿照buildString
實現buildMap
fun <K,V>buildMap(build:HashMap<K,V>.()->Unit):Map<K,V>{
val map = HashMap<K,V>()
map.build()
return map
}複製程式碼
38. n38TheFunctionApply
使用apply
重寫上一練習中的功能
fun <T> T.myApply(f: T.() -> Unit): T {
f()
return this
}複製程式碼
39. n39HtmlBuilders
把products
填充進表格,並設定好背景色,執行htmlDemo.kt
可以預覽內容
fun renderProductTable(): String {
return html {
table {
tr(color = getTitleColor()) {
td {
text("Product")
}
td {
text("Price")
}
td {
text("Popularity")
}
}
val products = getProducts()
for ((index,product) in products.withIndex()){
tr {
td(color = getCellColor(index,0)){
text(product.description)
}
td (color = getCellColor(index,1)) {
text(product.price)
}
td (color = getCellColor(index,2)){
text(product.popularity)
}
}
}
}
}.toString()
}複製程式碼
40. n40BuildersHowItWorks
答案:
1:c,td
是一個方法,這裡的td
顯然是在呼叫
2:b,color
是引數名,這裡使用了命名引數
3:b,這裡是個lambda
表示式
4:c,this
指向呼叫者