24 HAZİRAN 2010, PERŞEMBE
Kuyruk özyinelemeli fonksiyon optimize edilmiş olduğundan emin olmak için Scala açıklama nedir?
@tailrec
derleyici kuyruk özyinelemeli fonksiyon optimize sağlamak için ek açıklama olduğunu düşünüyorum. Sadece bildirimi önüne koymak mı? Ayrıca eğer Scala komut modu (ÇOĞALTMA altında örnek :load <file>
kullanmak için) kullanılırsa işe yarıyor mu?
CEVAP
24 HAZİRAN 2010, PERŞEMBE
"Tail calls, @tailrec and trampolines" blog yazısı:
- Scala 2.8, da
@tailrec
hangi yöntemleri optimize edilmiş bilgi almak için yeni açıklama kullanabilecektir.
Bu açıklama derleyici optimize eder umut özel yöntemler işaretlemek sağlar.
Eğer derleyici tarafından optimize varsa bir uyarı alacaksınız.- Ya da daha önce Scala 2.7, manuel test veya bayt kodu muayene güvenmek, optimize edilmiş bir yöntem olup olmadığını bulmak gerekir.
Örnek:
değişikliklerinizi çalışmış emin olabilirsiniz
@tailrec
ek açıklama ekleyebilirsiniz.
import scala.annotation.tailrec
class Factorial2 {
def factorial(n: Int): Int = {
@tailrec def factorialAcc(acc: Int, n: Int): Int = {
if (n <= 1) acc
else factorialAcc(n * acc, n - 1)
}
factorialAcc(1, n)
}
}
Ve ÇOĞALTMA (Scala REPL tips and tricks dan örnek) çalışır:
C:\Prog\Scala\tests>scala
Welcome to Scala version 2.8.0.RC5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_18).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import scala.annotation.tailrec
import scala.annotation.tailrec
scala> class Tails {
| @tailrec def boom(x: Int): Int = {
| if (x == 0) throw new Exception("boom!")
| else boom(x-1) 1
| }
| @tailrec def bang(x: Int): Int = {
| if (x == 0) throw new Exception("bang!")
| else bang(x-1)
| }
| }
<console>:9: error: could not optimize @tailrec annotated method: it contains a recursive call not in tail position
@tailrec def boom(x: Int): Int = {
^
<console>:13: error: could not optimize @tailrec annotated method: it is neither private nor final so can be overridden
@tailrec def bang(x: Int): Int = {
^
Bunu Paylaş:
LogCat mesaj: Google Play hizmetleri k...
Nasıl kapsam için optimize etmek ve Sc...
Kod optimize edilmiş olduğundan ifades...
Eclipse'de yeni bir proje Maven Java 1...
Scala olarak kullanmak için JSON nedir...