J'ai ce code:Scala: duplication de code Réécrire avec des fermetures
val arr: Array[Int] = ...
val largestIndex = {
var i = arr.length-2
while (arr(i) > arr(i+1)) i -= 1
i
}
val smallestIndex = {
var k = arr.length-1
while (arr(largestIndex) > arr(k)) k -= 1
k
}
Mais il y a beaucoup de duplication de code. J'ai essayé de réécrire cela avec des fermetures mais j'ai échoué. J'ai essayé quelque chose comme ceci:
def index(sub: Int, f: => Boolean): Int = {
var i = arr.length-sub
while (f) i -= 1
i
}
val largest = index(2, i => arr(i) > arr(i+1))
val smallest = index(1, i => arr(largest) > arr(i))
Le problème est que je ne peux pas utiliser le paramètre i de l'indice de la méthode() dans la fermeture. Y a-t-il un moyen d'éviter ce problème?
Merci! Cela fonctionne bien. – sschaef