學習kotlin第12天 lambda表示式

2021-08-02 07:08:29 字數 2980 閱讀 3769

繼續昨天的,從昨天的第14個坑開始。

坑1、以map為例。文件上為如下**,呼叫時由於

lambda

表示式在圓括號以外,而圓括號中已無其它引數,故可以省略

fun 

list

.map(transform: (t) -> r): list

fun 

main(args: array

) )println(doubled)

}

在idea中該

for迴圈提示

loop can be replaced with stdlib operations less... (ctrl+f1)

this inspection reports for-loops that can be replaced with a sequence of stdlib-operations (like "map", "filter" etc)

按照提示修改為

fun 

list

.map(transform: (t) -> r): list

}

發生了stackoverflowerror。因為這兩個

map是不同的方法,

this.map

呼叫的應該是

collections.kt

檔案中的

iterable.map

方法而非當前

map方法,改一下當前方法名即可。閱讀原始碼可知該方法和原始碼幾乎相同。

/**

[transform]

function

* to each element in the original collection.

*/@suppress("non_public_call_from_public_inline")

public inline fun

iterable

.map(transform: (t) -> r): list

/**

[transform]

function to each element of the original collection

[destination].*/

public inline fun

mutablecollection

> iterable

.mapto(destination: c, transform: (t) -> r): c

坑2

、如果lambda表示式的引數只有乙個,則可以省略並用

it代替。

it在之前

for迴圈的時候見到過,當時不知道

it是什麼,以為直接是這個集合的

item

呢,確實也是,但它大多是該方法通過

for(item in this)

得到的,然後作為

lambda

表示式的引數。

fun 

main(args: array

) println(doubled)

}

坑3、下劃線用於lambda中表示沒用到的引數。

fun 

main(args: array

) )//_代表沒有用到的key

}

坑4

、高階函式必須為函式型別的引數指定型別,該引數名可作為函式名使用。前面已經見到很多了,就不多說了。

坑5、可通過標籤從lambda顯示返回乙個值,否則為最後乙個表示式的值。

坑6、匿名函式作為引數時必須放在圓括號內,匿名函式與lambda表示式的區別是

return

時匿名函式從自身返回,而

lambda

表示式中的

return

將從包含它的函式返回。

坑7、kotlin的

lambda

表示式或者匿名函式(以及區域性函式和物件表示式)可以訪問外部作用域中宣告的變數,類似於內部類。

坑8、類似於擴充套件函式,允許在函式體內訪問接收者物件的成員而無需額外的限定符。匿名函式允許直接指定函式字面值的接收者型別。

當接收者型別可以從上下文推斷時,

lambda

表示式可以用作帶接收者的函式字面值。

。。(暈乎乎的,沒懂)

class 

html

}fun

html(init: html.() -> unit): html

fun

main(args: array

) }

坑9、內聯函式能消除部分時間開銷,減少部分效率損失,用inline標記。。。求清晰點的demo!

坑10、noline修飾部分引數內聯,求解釋!求demo!

坑11、前面說了lambda表示式中的 return 將從包含它的函式返回,現在又來一句lambda表示式不能使包含他的函式返回,除非設定為內聯。

誰能告訴我

為什麼?

我有一種把所有文章都刪掉的衝動!我在想,我到底是來踩坑的還是來浪費大家時間的?

坑12、這種位於lambda表示式中,但退出包含它的函式,稱為非區域性返回。(有一種似懂非懂的感覺)

fun 

haszeros(ints: list

): boolean

return false

}

坑13、crossinline用來標記呼叫來自區域性物件或者巢狀函式的內聯函式。(看見demo也是懵逼的)

inline fun 

f(crossinline body: () -> unit)

}

坑14、具體化的型別引數以及內聯屬性我已經無法描述出來了,神啊,救救我吧!

python學習第12天

一.迭代器 1.概念 迭代器指的是迭代取值的工具,迭代是乙個重複的過程,每次重複都是基於上一次的結果而繼續,單純的重複不是迭代 2.特徵 不依賴索引,通過next指標迭代所有資料,一次只取乙個,可以大大節省空間,迭代無限量的資料 3.可迭代物件 如果成員中含有 iter 這個方法,就是可迭代物件 d...

學習kotlin第11天 函式和lambda表示式

繼續瀏覽,只能說是繼續瀏覽了,根本就不是踩坑嘛,都踩不平。坑1 第一天就見到fun關鍵字了,結果現在才告訴我這是宣告函式,呼叫使用傳統的 變數名 函式名 引數 呼叫成員函式用 點表示法 引數列表用 name type value 表示法並用逗號隔開。這文件,已經無力吐槽。坑2 中綴表示法呼叫函式時函...

Python學習第12天 類

1 類的建立 語法 class 類名 類的屬性 name 喵醬 類的方法 def joke self print 建立類成功 2 類的例項化 語法 例項名 類名 列如 my captain captain 意義 建立乙個例項,它可以呼叫所屬類的所有屬性和方法 知識點 3 self引數 4 init ...