SORU
16 Kasım 2012, Cuma


Neden `val` özel `özel final val` farklı?

private val private final val Scala Referans bölüm 4.1 görene kadar aynı, ben de öyle düşünürdüm:

Sabit değer tanımı formu

final val x = e

e sabit bir ifade (§6.24). Son değiştirici mevcut olması gerekir ve hiçbir tür açıklama yapılabilir. Sabit değeri için başvurular x sabit ifade olarak kendilerini tedavi edilir; oluşturulan kod tanım sağ tarafta e değiştirilir.

Ve bir test yazdım:

class PrivateVal {
  private val privateVal = 0
  def testPrivateVal = privateVal
  private final val privateFinalVal = 1
  def testPrivateFinalVal = privateFinalVal
}

javap -c çıkış:

Compiled from "PrivateVal.scala"
public class PrivateVal {
  public int testPrivateVal();
    Code:
       0: aload_0       
       1: invokespecial #19                 // Method privateVal:()I
       4: ireturn       

  public int testPrivateFinalVal();
    Code:
       0: iconst_1      
       1: ireturn       

  public PrivateVal();
    Code:
       0: aload_0       
       1: invokespecial #24                 // Method java/lang/Object."<init>":()V
       4: aload_0       
       5: iconst_0      
       6: putfield      #14                 // Field privateVal:I
       9: return
}

Bayt kodu gibi Scala Referans şunları söyledi: private val private final val değildir.

Neden gelmiyorscalactedavi private val private final val gibi? Altta yatan herhangi bir neden var mı?

CEVAP
16 Kasım 2012, Cuma


Yani, bu sadece bir tahmin, ama sağ tarafta bir edebi ile son statik değişkenler sabitler olarak bayt koduna inlined olsun Java içinde daimi bir can sıkıntısı oldu. Bir performans emin yarar, ama tanımı ikili uyumluluk eğer kırmak için neden yarattığı "sürekli" hiç değişmedi. Değiştirmek gerekebilir olan son statik bir değişken tanımlarken, Java programcıları bir yöntem veya oluşturucu ile değeri başlatılıyor gibi kesmek için başvurmak zorunda.

Scala bir val zaten Java anlamda kesindir. Scala tasarımcıları gereksiz değiştirici son demek için kullanıyor gibi görünüyor "sabit değer içi izni". Scala programcılar kesmek başvurmadan bu davranışı üzerinde tam kontrol var: eğer bir inlined sürekli, değişim asla ama hızlı bir değer istiyorlarsa, yazdıkları "son val". eğer esneklik ikili uyumluluğu bozmadan değerini değiştirmek istiyorsanız, sadece "bir". val

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Россия

    Google Ро

    9 Temmuz 2007
  • tinycammonitor

    tinycammonit

    14 Aralık 2010
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009