2011-10-07 8 views
6

Test/hata ayıklama döngüsüme biraz etkileşim katmaya çalışıyordum, bu yüzden Scala REPL'den derslerimle oynamaya çalıştım. Bu harika çalışıyor ancak bir testten (test aynı pakette ise) test edilebilen paket ve özel seviyedeki üyelere erişememe dezavantajına sahiptir.REPL'de varsayılan (paket) veya özel erişim düzeyi olan üyeler nasıl kullanılır?

Scala REPL paketinin "bağlamını" belirleyebilir miyim?

Kullanıcılara ulaşmak için yansımayı kullanabilirim, ancak bu yazı yazarken REPL'yi ilk başta kullanmanın amacını ortadan kaldıracak.

cevap

1

package object'da tanımlanan üyelere erişemeyeceğiniz anlamına mı geliyor? Sen

import mypackage._ 

veya basitçe öneki formu mypackage.mymember(...) kullanarak erişmeyi kullanarak bu üyeleri alabilirsiniz.

5

Scala'da yalnızca paket oluşturmak için yoldan çıkmanız gerektiğinden, sınadığınız sınıfa yazıldığını varsayalım.

Kısaca, bu mümkün değil. REPL'deki her satır kendi paketine sarılır, bu nedenle başka bir paketin yalnızca başka bir paket üyesine erişmesine izin verilmez. sarma için kullanılan varsayılan paket adı önek değiştirmek için belgesiz sistem özelliği olmamasına rağmen, paket adı hala numarasını artırarak otomatik olarak oluşturulur: Bu sık sık yaptığım bir şey olduğunu

$ scala -Xprint:parser -Dscala.repl.naming.line=foo.line 
scala> val x = 1 
[[syntax trees at end of parser]]// Scala source: <console> 
package foo.line1 { 
    object $read extends scala.ScalaObject { 
    // snip ... 
    object $iw extends scala.ScalaObject { 
     // snip ... 
     object $iw extends scala.ScalaObject { 
     // snip ... 
     val x = 1 
     } 
    } 
    } 

varsayarsak, ne yapabilirdi yansımanın kullanımını kolaylaştıran ve ardından :load komutunu kullanarak REPL içine yükleyen bir dosya oluşturur.

İlgili konular