<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 標簽處返回 在 Kotlin 中任何表達式都可以用標簽(label)來標記。 標簽的格式為標識符后跟 @ 符號,例如: abc@ 、jarOfLove@ 都是有效的標簽。我們可以用Label標簽來控制 return 、 break 或continue 的跳轉(jump)行為。 Kotlin 有函數字面量、局部函數和對象表達式。因此 Kotlin 的函數可以被嵌套。 標簽限制的 return 允許我們從外層函數返回。 最重要的一個用途就是從 lambda 表達式中返回。回想一下我們這么寫的時候: ``` fun foo() { listOf(1, 2, 3, 4, 5).forEach { if (it == 3) return // 非局部直接返回到 foo() 的調用者 print(it) } println("this point is unreachable") } ``` 運行結果 ``` 12 ``` 這個return表達式從最直接包圍它的函數即`foo`中返回。 (注意,這種非局部的返回只支持傳給[內聯函數](http://www.kotlincn.net/docs/reference/inline-functions.html)的 lambda 表達式。) 如果我們需要從 lambda 表達式中返回,我們必須給它加標簽并用以限制return。 ``` fun foo() { listOf(1, 2, 3, 4, 5).forEach lit@{ if (it == 3) return@lit // 局部返回到該 lambda 表達式的調用者,即 forEach 循環 print(it) } print(" done with explicit label") } ``` 運行結果 ``` 1245 done with explicit label ``` 我們在 lambda 表達式開頭處添加了標簽 lit@ ,我們可以這么理解:該標簽相當于是記錄了Lambda表達式的指令執行入口地址, 然后在表達式內部我們使用 return@lit 來跳轉至Lambda表達式該地址處。 現在,它只會從 lambda 表達式中返回。通常情況下使用隱式標簽更方便。 該標簽與接受該 lambda 的函數同名。 ``` fun foo() { listOf(1, 2, 3, 4, 5).forEach { if (it == 3) return@forEach // 局部返回到該 lambda 表達式的調用者,即 forEach 循環 print(it) } print(" done with implicit label") } ``` 運行結果 ``` 1245 done with implicit label ``` 接收該Lambda表達式的函數是forEach, 所以我們可以直接使用 return@forEach ,來跳轉到此處執行下一輪循環。 或者,我們用一個[匿名函數](http://www.kotlincn.net/docs/reference/lambdas.html#匿名函數)替代 lambda 表達式。 匿名函數內部的*return*語句將從該匿名函數自身返回 ``` fun foo() { listOf(1, 2, 3, 4, 5).forEach(fun(value: Int) { if (value == 3) return // 局部返回到匿名函數的調用者,即 forEach 循環 print(value) }) print(" done with anonymous function") } ``` 運行結果 ``` 1245 done with anonymous function ``` 請注意,前文三個示例中使用的**局部返回**類似于在常規循環中使用 continue 。并沒有 break 的直接等價形式,不過可以通過增加另一層嵌套 lambda 表達式并從其中非局部返回來模擬: ``` fun foo() { run loop@{ listOf(1, 2, 3, 4, 5).forEach { if (it == 3) return@loop // 從傳入 run 的 lambda 表達式非局部返回 print(it) } } print(" done with nested loop") } ``` 運行結果 ``` 12 done with nested loop ``` 當要返一個回值的時候,解析器優先選用標簽限制的 return,即 ``` return@a 1 ``` 意為“從標簽`@a`返回 1”,而不是“返回一個標簽標注的表達式`(@a 1)`”。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看