ifadeler için Scala karşı dosyalarda grup
Programming in Scala ile gidiyorum ve Python bakış açısından şeyler bakmak için cazip değilim ama program istemiyorum "Scala. Python"
Oldukça kontrol akış gelince ne yapacağımdan emin değilim: Python, ölüme for x in some_iterable
kullanıyoruz ve çok seviyoruz. Bir çok benzer bir yapı . aramalar Odersky olan Scala var ^em>ifademuhtemelen döngü için Java ayırmak için. Ayrıca, Scala foreach
bir öznitelik (öznitelik olurdu sanırım, doğru adı için Scala hakkında yeterince bilgim yok) iterable veri türleri vardır. foreach
bir kabın içinde, her madde için, ama işlevi çok daha fazlasını yapmak için kullanabilirim gibi görünmüyor.
Bu bir kaç soru ile beni bırakır. İlk olarak, için ifadeleri önemli/yoğun olarak kullanılan yapıları Scala gibi Python, ve ikinci olarak, ne zaman kullanmalıyım foreach
yerine bir ifade (başka bunun en bariz örneği arama fonksiyonu her maddenin bir kap)?
Çok belirsiz ya da kapsamının da son derece geniş olan ben değilim umarım, ama sadece Scala çok güzel şimdiye kadar görünen () tasarım/dili temel bazı grok için çalışıyorum.
CEVAP
python liste üreteçleri ve jeneratör ifadeleri for
kullanır. Buçokfor
scala ifadesine benzer:
bu python
>>> letters = ['a', 'b', 'c', 'd']
>>> ints = [0, 1, 2, 3]
>>> [l str(i) for l in letters for i in ints if i % 2 == 0]
['a0', 'a2', 'b0', 'b2', 'c0', 'c2', 'd0', 'd2']
bu scala
scala> val letters = List('a', 'b', 'c', 'd')
scala> val ints = List(0, 1, 2, 3)
scala> for (l <- letters; i <- ints if i % 2 == 0) yield l.toString i
res0: List[java.lang.String] = List(a0, a2, b0, b2, c0, c2, d0, d2)
Her inşa jeneratörleri/kullanımına bir numara al, filtreler ifadeler uygulamak ve kombine bir ifade verebilir. Python (expr for v1 in gen1 if expr1 for v2 in gen2 if expr2)
Aşağı Yukarı eşit sayılır:
for v1 in gen1:
if expr1:
for v2 in gen2:
if expr2:
yield expr
Scala for (v1 <- gen1 if expr1; v2 <- gen2 if expr2) yield expr
Aşağı Yukarı eşit sayılır:
gen1.withFilter(expr1).flatMap(v1 => gen2.withFilter(expr2).map(v2 => expr))
Eğer for x in xs
sözdizimi python seviyorsanız, büyük ihtimalle for
scala ifade seveceksiniz.
Scala bazı ek sözdizimi ve çeviri katlanmış. Sözdizimi bilge. Ayrıca değer atamaları gerçekleştirebilirsiniz.
val res = for {
i <- 1 to 20; i2 = i*i
j <- 1 to 20; j2 = j*j
k <- 1 to 20; k2 = k*k
if i2 j2 == k2
} yield (i, j, k)
Ayrıca v1 <- gen1
gerçekten bir maç case v1 => gen1
gerçekleştirir. Eğer eşleşme yok bu öğeleri yineleme itibaren yok sayılır.
scala> val list = List(Some(1), None, Some(2))
scala> for (Some(i) <- list) yield i
res2: List[Int] = List(1, 2)
for
dil önemli bir yere sahip olduğunu düşünüyorum. Okuduğun kitapta koca bir bölüm (23) olan birşey yok aslında söyleyebilirim!
C için bir sebep mi'#; dosyalarda ...
.Döngü daha hızlı çalışır NET,' v...
Nasıl dosyalarda grup dizini bulmak iç...
'' Paralel devam etmek için ...
nasıl Javascript dosyalarda grup durdu...