2016-08-31 5 views
5

を作成する「まで」 sec)。 enter image description hereKotlin私はYourKitと私のコードをプロファイリングするとき、私は/およそ2K(私はIntRangeオブジェクトの膨大な量を持っていたことに気づいた</p> <pre><code>for (x in 0 until bodies.size) bodies[x]() </code></pre> <p>の下に私のforループ<code>until</code>中置の楽しみを使用していた楽しみがIntRangeごみ

ループをint...int rangeToを使用するように切り替えると、直接ゴミが生成されません。

for (x in 0..bodies.size-1) bodies[x]() 

誰かがこの2つの違いを説明できますか?私はInt.untilを伝えることができることは、単に現在のバージョンv1.0.4デベロッパーでthis .. to

public infix fun Int.until(to: Int): IntRange { 
    val to_ = (to.toLong() - 1).toInt() 
    if (to_ > to) throw IllegalArgumentException("The to argument value '$to' was too small.") 
    return this .. to_ 
} 

答えて

5

を返しますから、彼らはforループの中で最も一般的であるため、コンパイラはrangeTodownTo機能のための呼び出しを最適化します。

私は彼らがすぐにuntilをすぐに最適化すると思います。

該当するチケットはhttps://youtrack.jetbrains.com/issue/KT-9900です。 自由に投票してください。

関連する問題

 関連する問題