繼續昨天的,從昨天的第14個坑開始。
坑1、以map為例。文件上為如下**,呼叫時由於
lambda
表示式在圓括號以外,而圓括號中已無其它引數,故可以省略
funlist
.map(transform: (t) -> r): list
funmain(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)
按照提示修改為
funlist
.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
/**坑2[transform]
function to each element of the original collection
[destination].*/
public inline fun
mutablecollection
> iterable
.mapto(destination: c, transform: (t) -> r): c
、如果lambda表示式的引數只有乙個,則可以省略並用
it代替。
it在之前
for迴圈的時候見到過,當時不知道
it是什麼,以為直接是這個集合的
item
呢,確實也是,但它大多是該方法通過
for(item in this)
得到的,然後作為
lambda
表示式的引數。
funmain(args: array
) println(doubled)
}
坑3、下劃線用於lambda中表示沒用到的引數。
fun坑4main(args: array
) )//_代表沒有用到的key
}
、高階函式必須為函式型別的引數指定型別,該引數名可作為函式名使用。前面已經見到很多了,就不多說了。
坑5、可通過標籤從lambda顯示返回乙個值,否則為最後乙個表示式的值。
坑6、匿名函式作為引數時必須放在圓括號內,匿名函式與lambda表示式的區別是
return
時匿名函式從自身返回,而
lambda
表示式中的
return
將從包含它的函式返回。
坑7、kotlin的
lambda
表示式或者匿名函式(以及區域性函式和物件表示式)可以訪問外部作用域中宣告的變數,類似於內部類。
坑8、類似於擴充套件函式,允許在函式體內訪問接收者物件的成員而無需額外的限定符。匿名函式允許直接指定函式字面值的接收者型別。
當接收者型別可以從上下文推斷時,
lambda
表示式可以用作帶接收者的函式字面值。
。。(暈乎乎的,沒懂)
classhtml
}fun
html(init: html.() -> unit): html
fun
main(args: array
) }
坑9、內聯函式能消除部分時間開銷,減少部分效率損失,用inline標記。。。求清晰點的demo!
坑10、noline修飾部分引數內聯,求解釋!求demo!
坑11、前面說了lambda表示式中的 return 將從包含它的函式返回,現在又來一句lambda表示式不能使包含他的函式返回,除非設定為內聯。
誰能告訴我
為什麼?
我有一種把所有文章都刪掉的衝動!我在想,我到底是來踩坑的還是來浪費大家時間的?
坑12、這種位於lambda表示式中,但退出包含它的函式,稱為非區域性返回。(有一種似懂非懂的感覺)
funhaszeros(ints: list
): boolean
return false
}
坑13、crossinline用來標記呼叫來自區域性物件或者巢狀函式的內聯函式。(看見demo也是懵逼的)
inline funf(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 ...