SORU
30 NİSAN 2010, Cuma


Nasıl bir döngü dışına Scala kırılır mı?

Nasıl bir döngü patlak mı?

var largest=0
for(i<-999 to 1 by -1) {
    for (j<-i to 1 by -1) {
        val product=i*j
        if (largest>product)
            // I want to break out here
        else
           if(product.toString.equals(product.toString.reverse))
              largest=largest max product
    }
}

Nasıl kuyruk özyineleme içine iç içe for döngüsü kapatırım?

2009 http://www.slideshare.net/Odersky/fosdem-2009-1013261FOSDEM de Scala konuşmadan 22 sayfa:

Kır ve devam et Scala onları yok. Neden? Biraz zorunluluk; daha çok küçük işlevleri vardır Kilitler ile nasıl etkileşim sorunu. Gerekli değildir!

Bunun açıklaması nedir?

CEVAP
30 NİSAN 2010, Cuma


() Döngüler çıkmak için üç seçeneğiniz var.

Toplam 1000'den büyük oluncaya kadar sayıları toplamak istediğinizi varsayalım. Deneyin

var sum = 0
for (i <- 0 to 1000) sum  = i

(sum >durdurmak istediğiniz dışında 1000).

Ne? Birkaç seçenek vardır.

(1a) test koşullu içeren bazı inşa Kullanın.

var sum = 0
(0 to 1000).toStream.takeWhile(_ => sum < 1000).foreach(i => sum =i)

(1b) döngü için bir yerine kuyruk özyineleme, ne kadar kolay Scala: yeni bir yöntem yazmak için yararlanarak Kullanın

var sum = 0
def addTo(i: Int, max: Int) {
  sum  = i; if (sum < max) addTo(i 1,max)
}
addTo(0,1000)

(2) bir özel durum.

object AllDone extends Exception { }
var sum = 0
try {
  for (i <- 0 to 1000) { sum  = i; if (sum>=1000) throw AllDone }
} catch {
  case AllDone =>
}

(2a) scala.util.control.Breaks sözdizimini kullanarak bu zaten önceden paketlenmiş Scala 2.8 C/Java tanıdık eski break çok benziyor:

import scala.util.control.Breaks._
var sum = 0
breakable { for (i <- 0 to 1000) {
  sum  = i
  if (sum >= 1000) break
} }

(3) bir yöntem içine kodu Koymak ve geri kullanın.

var sum = 0
def findSum { for (i <- 0 to 1000) { sum  = i; if (sum>=1000) return } }
findSum

Bu kasıtlı değil-çok kolay en az üç nedenden dolayı aklıma yapılır. İlk olarak, büyük kod blokları, kolay göz ardı "devam" ve "kırmak" deyimleri, ya da olduğunuzu düşünmez patlak daha fazla veya daha az gerçekten, ya da ihtiyaç molası iki döngüler yapamazsın kolayca her neyse-standart kullanım, kullanışlı, bazı sorunlar olur ve böylece denemelisin yapı kodunuzu farklı bir şekilde. İkincisi, Scala olan her türlü yerleştirmeler bu muhtemelen bile fark, bu yüzden eğer patlak olan şeyler. muhtemelen sürpriz kod akışı sona erdi (özellikle ile kapatma). Üçüncü olarak, en Scala'nın "döngü" değil aslında normal döngüler ... yöntemini çağıran kendi döngü, ya da onlar özyineleme olabilir ya da olmayabilir aslında bir döngü ve ancak onlarhareketlooplike, zor olan ne biliyor tutarlı bir yol "ve benzeri." break Bu yüzden, tutarlı olmak, yapmak akıllıca bir şey "" hiç. ara vermek yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • TurkishRoyal

    TurkishRoyal

    16 Ocak 2007
  • tychoadragmire

    tychoadragmi

    20 Mart 2006