Kotlin成員引用

2021-08-13 03:49:03 字數 998 閱讀 1188

將成員引用替代lambda傳遞的使用條件:

lambda(或函式)的引數列表只有乙個引數(傳遞成員引用時,只能傳遞該引數的成員引用);

一次只能傳遞乙個函式引用(乙個成員引用只能代替乙個、一次函式呼叫);

被傳遞的函式的簽名必須和被接收的lambda的簽名相同(引數列表型別和返回值型別相同);

補充:傳遞屬性時(本質上是傳遞函式引用的語法糖),適用於:沒有動作、引數列表為空,只需要接收乙個lambda返回乙個值的情況

一般傳遞某個類的成員引用時,該類必須是lambda中的僅有的那乙個引數

但傳遞全域性函式時沒有此限制

全域性函式》

fun f1():unit

fun f2(i1:int):unit

fun f3(i1:int,s1:short):string

>>c1::f1

型別為kfunction2

>>c1::f2

型別為kfunction3

>>c1::f3

型別為kfunction4

(類成員函式隸屬於動態的某個例項,所以呼叫時必須動態繫結乙個例項,在傳遞給lambda時,如果傳遞的是物件例項的成員引用,那麼預設這個物件例項從該lambda的引數列表中得到,這種情況lambda也只有乙個引數)

使用成員引用,引用函式時,會生成kfunctionn型別(n根據成員引用函式的簽名而發生變化),kfunction和lambda必須匹配才能傳遞

kfunctionn介面會在編譯時動態生成,其型別引數列表中,引數0~n-1的型別應當與lambda的型別引數列表相匹配,引數n的型別應當與lambda的返回值型別相匹配

val v = ::f1

::f1是宣告了乙個成員引用,宣告不是呼叫,呼叫時,後面跟小括號

(::f1)() or v()

和lambda一樣,宣告不是呼叫,宣告後再跟小括號是呼叫語法

fun f(f:()->unit){}

lambda型別:kfunction0

全域性(區域性)屬性:

kotlin 的區間和類成員 for 迴圈

val intrange intrange 0.200 0.200 val intrangeexclusive intrange 0 until 200 0,199 val emptyrange intrange 0.1 fun main args array true trueprintln in...

結構體成員的引用

有下面幾個結構體 struct 是個結構標籤 struct x struct y 20 z 或者typedef struct 是個型別名 x y 20 z struct complex struct complex comp 結構體成員直接訪問 comp.sa 4 c 結構體成員的間接訪問 當擁有乙...

c 物件成員的引用

在程式中經常需要訪問類物件中的成員。訪問類物件中的成員可以有3種方法 例如在程式中可以寫出以下語句 stud1.num 1001 假設num已定義為公用的整型資料成員 表示將整數1001賦給物件stud1中的資料成員num。其中 是成員運算子,用來對成員進行限定,指明所訪問的是哪乙個物件中的成員。注...