Nasıl kapsam için optimize etmek ve Scala döngüler?
Scala, Java kadar hızlı olması gerekiyordu. Ben aslında Java ele o Scala Project Euler bazı sorunları tekrar düşünüyordum. "Ne 20?" için 1 numaraları tarafından eşit olarak bölünebilen en küçük pozitif sayıdır Sorun 5 özellikle:
İşte 0.7 saniye benim makinede sürer Java benim çözüm:
public class P005_evenly_divisible implements Runnable{
final int t = 20;
public void run() {
int i = 10;
while(!isEvenlyDivisible(i, t)){
i = 2;
}
System.out.println(i);
}
boolean isEvenlyDivisible(int a, int b){
for (int i = 2; i <= b; i ) {
if (a % i != 0)
return false;
}
return true;
}
public static void main(String[] args) {
new P005_evenly_divisible().run();
}
}
İşte "doğrudan çevirisi" 103 saniye (147 kat daha uzun!) alır, Scala, benim
object P005_JavaStyle {
val t:Int = 20;
def run {
var i = 10
while(!isEvenlyDivisible(i,t))
i = 2
println(i)
}
def isEvenlyDivisible(a:Int, b:Int):Boolean = {
for (i <- 2 to b)
if (a % i != 0)
return false
return true
}
def main(args : Array[String]) {
run
}
}
Sonunda geldi 39 saniye (55 kat daha uzun) sürer fonksiyonel programlama, yük
object P005 extends App{
def isDivis(x:Int) = (1 to 20) forall {x % _ == 0}
def find(n:Int):Int = if (isDivis(n)) n else find (n 2)
println (find (2))
}
Windows 7 64-bit Scala 2.9.0.1 kullanarak. Nasıl performansı? Yanlış bir şey mi yapıyorum? Ya da Java sadece çok daha hızlı.
CEVAP
Bu durumda sorun için ifade içinde döndüren. Bu da kapsayan yöntemi de yakalanan bir NonLocalReturnException atmak, çevrilmiş olur. İyileştirici dosyalarda grup ama/catch throw henüz ortadan kaldırmak olamaz ortadan kaldırabilir. Ve/catch at pahalıdır. Ama böyle iç içe döndürür Scala programlarında nadir olduğundan, iyileştirici henüz bu davayı ele vermedi. Umarım bu sorunu kısa sürede çözeceği iş iyileştirici geliştirmek için var.
Nasıl özel yöntemleri, alanları veya i...
Bir dize kontrol etmek için nasıl &quo...
Nasıl iPhone SDK üzerinde etkin bir İn...
Nasıl Server tablo sütun olup olmadığı...
Nasıl terminalden Curl ile JSON veri g...