2017-10-20 17 views
1

Javaで戻る私はvoidメソッドのためにreturnしか書いていませんでした...しかし、kotlinはちょうど戻りを許さないようですが、代わりに[email protected]を使用しますか? 誰かがこれが何であるかを説明することができますか?ラムダの内側に、あなたはそれがあいまいであるかもしれないので、あなたは、からreturnしたい範囲を指定する必要がありKotlin setOnclickListener

bAddLine.setOnClickListener { 
      val selectedSeries = getSelectedSeries() 
      if (selectedSeries.isEmpty()) { 
       Toast.makeText(this, getString(R.string.toast_channel_mandatory), Toast.LENGTH_LONG).show() 
       [email protected] 
      } 
     } 

答えて

5

kotlinlangウェブサイトから:関数リテラル、ローカル関数およびオブジェクト式でラベル

戻り、機能がKotlinにネストすることができます。適格リターンは、外部関数から戻ることができます。最も重要なユースケースはラムダ式から戻ることです。私たちはこれを書いたときにことを思い出してください:

fun foo() { 
    ints.forEach { 
     if (it == 0) return // nonlocal return from inside lambda directly to the caller of foo() 
     print(it) 
    } 
} 

最も内側の関数からreturn -expression戻り、すなわち、fooという。 (このような非局所的なリターンが唯一のインライン関数に渡されたラムダ式のためにサポートされていることに注意してください。)私たちはラムダ式から復帰する必要がある場合は、我々はそれにラベルを付け、returnを修飾する必要があります。

fun foo() { 
    ints.forEach [email protected] { 
     if (it == 0) [email protected] 
     print(it) 
    } 
} 

、それをラムダ式からのみ返ります。 implicitsラベルを使用する方が便利なことがよくあります。そのようなラベルは、ラムダが渡される関数と同じ名前です。

fun foo() { 
    ints.forEach { 
     if (it == 0) [email protected] 
     print(it) 
    } 
} 
2

returning at labelsの公式ドキュメントを参照してください。

この特定のケースでは、何も返さない関数の最後に戻る場合は、returnステートメントを完全に省略することができます。

関連する問題