關(guān)于標(biāo)簽
在kotlin中使用過標(biāo)識(shí)符跟@
符號(hào)來定義一個(gè)標(biāo)簽搞糕,使用@
符號(hào)后面跟標(biāo)識(shí)符來引用一個(gè)標(biāo)簽
在kotlin中每一個(gè)函數(shù)都與一個(gè)或多個(gè)地址對(duì)應(yīng)度气,而每個(gè)變遷也是與一個(gè)或多個(gè)地址對(duì)應(yīng)鄙漏,所以函數(shù)本身就是一個(gè)標(biāo)簽
由于匿名還屬?zèng)]有函數(shù)名,那么我們可以自定義一個(gè)標(biāo)簽來指向這個(gè)函數(shù)地址
This表達(dá)式
在Kotlin红符,有時(shí)候需要調(diào)用自身的函數(shù)或者變量赞弥,會(huì)用到this
表達(dá)式
1、在類的成員中阵漏,this
指的是該類的當(dāng)前對(duì)象
2驻民、在擴(kuò)展函數(shù)或者帶接受者的函數(shù)字面值中翻具,this
表示在點(diǎn)左側(cè)傳遞的接收者參數(shù)
3、如果this
沒有限定符回还,它指的是最內(nèi)層的包含它的作用域裆泳。要引用其他作用域中的this
,請(qǐng)使用 標(biāo)簽限定符
關(guān)于標(biāo)簽的指向:
下面會(huì)用this演示標(biāo)簽的指向:
調(diào)用
當(dāng)我們?cè)谡{(diào)用
ThisInnerClass
的test()
函數(shù)的時(shí)柠硕,會(huì)調(diào)用foo
的擴(kuò)展函數(shù)在
foo
函數(shù)中 我們將a
指向ThisClass
,b
指向ThisInnerClass
工禾,b1
指向了ThisInnerClass的變量message
,c1
只想擴(kuò)展函數(shù)foo
蝗柔,從打印結(jié)果我們可以看出:
a
是ThisClass
的地址闻葵,b
是ThisInnerClass
的地址b1
指向的是ThisInnerClass
對(duì)象的變量message
c1
指向的是函數(shù)foo
點(diǎn)左側(cè)的接收者參數(shù)而c是當(dāng)前作用域的對(duì)象的值,即同
foo
函數(shù)
關(guān)于標(biāo)簽處返回 return標(biāo)簽
上面說到每個(gè)函數(shù)既是標(biāo)簽
當(dāng)我們return@forEach
的時(shí)候那么我們就會(huì)推出當(dāng)前循環(huán)癣丧,打印結(jié)果如下
而我們
return@returnTest
的時(shí)候槽畔,作用于就發(fā)生了改變,return
的是returnTest
函數(shù)胁编,所以打印的結(jié)果如下
關(guān)于標(biāo)簽出跳出 break 和continue
當(dāng)我們?cè)谧鲅h(huán)的時(shí)候 如果break跟標(biāo)簽
的話厢钧,那么他就會(huì)指向相應(yīng)的循環(huán)
如下:
我們?cè)?code>break跟@loopInner 指向的是內(nèi)層循環(huán),跳出的是內(nèi)層循環(huán)嬉橙,so 結(jié)果如下:
而當(dāng)我們break跟外層循環(huán)標(biāo)簽時(shí)早直,如下:
他跳出的就是指向的外層循環(huán),結(jié)果如下: