2016-08-23 7 views
3

完了ハンドラを使用して数値を集計しています。私が理解できないことは、2行でコードを壊した場合、実行回数が6から7に変わることです!どうして?スウィフトの遊び場で、実行回数が間違っているのはなぜですか?

func summer (from : Int, to: Int, handler: (Int) -> (Int)) -> Int { 
     var sum = 0 
     for i in from...to { 
      sum += handler(i) 
     } 
     return sum 

} 

summer(1, to:6){ //Shows '21' 
    return $0} // shows '(6 times)' 


// Same code, but in 1 line 
summer(1, to:6){return $0} // shows '(7 times)' 

IMAGE enter image description here

答えて

4

機能/表現がその行に呼び出されている回数を示しています:

enter image description here

呼び出し式(summer())は同じ行にあるので、余分な演算としてカウントされます。したがって、6枚のプリント+6は、その行に何が起こったかを1回のsummer()= 13回返します。

正しい用語を使用しているかどうかはわかりませんが、これはどういうことですか。

+0

閉鎖式の数が表示されていません。クロージャーに表示されている式の数が表示されています^ - ^()ここで間違っていない限り... – Fluidity

4

それは単にプレゼンテーションの結果です:

21 //the result from the first time 
(6 times) //the other 6 times 

(7times) //all 7 times, including the 21 one. 
+0

ここでは何を正確にカウントしていますか? – Honey

+0

クロージャの実行回数。それらの実行の最初は '21'を返しました – Alexander

+0

2行バージョンでは、私たちに '1回の実行'を知らせるのではなく、結果、つまり21をポップするでしょうか? – Honey

関連する問題