new { def ...}
yapı structural typeAnyRef{def ...}
ile yeni bir anonim nesne oluşturur:
scala> val aa = new { def kk = "bb" }
aa: AnyRef{def kk: String}
Sizin UNTIL
yöntem çünkü "yapısal tipi elemanın yansıtıcı erişim" olarak adlandırılan özelliği erişilebilir ve ayrıca en az bir import scala.language.reflectiveCalls
olmalıdır
scala> aa.kk
<console>:9: warning: reflective access of structural type member method kk should be enabled
by making the implicit value scala.language.reflectiveCalls visible.
This can be achieved by adding the import clause 'import scala.language.reflectiveCalls'
or by setting the compiler option -language:reflectiveCalls.
See the Scala docs for value scala.language.reflectiveCalls for a discussion
why the feature should be explicitly enabled.
aa.kk
^
res0: String = bb
Not, bu tanımlamak yerine biraz daha yavaş olduğunu: Scala 2.11.2 yılında SIP 18: Modularizing Language Features sonucu class Repeatable {def UNTIL = ...}
, çünkü (JVM için)işleviniz Object
(AnyRef) değerini döndürür ve bundan böyle yayınlanacak bir tür yoktur, bu nedenle Scala yansımayı kullanarak UNTIL
'u çağırır. Aynı zamanda bazı sentetik sınıflar da sunmamıştır, çünkü yapısal tip herhangi bir mevcut sınıfla (uygun UNTIL
yöntemiyle başka herhangi bir sınıf) eşleşebilir.
Çünkü 'UNTIL' bir yöntemdir, bir (n istekli) işlevinin adı değildir. –
Sonra, 'yeni {} 'bir nesne oluşturuyor? Bildiğim gibi, yöntem – 1ambda