Aşağıdaki kod, Inner
davranışını vermek yerine, useInner
kapsayıcı sınıfının yönteminde kodlanmış olmak yerine, Polymorphic Embedding of DSLs taklit etmeye çalışır. enclosing
yöntemini ekledim, böylece kullanıcının yalnızca Inner
örneklerine bir başvuru tutması gerekiyordu, ancak bunların her zaman kendi kapalı örneğini alabilirler. Bunu yaparak, belirli bir Outer
örneğinden alınan tüm Inner
örneklerinin yalnızca bir davranışı vardır (ancak burada istenir).Scala'da bir iç sınıf türüne gönderme
abstract class Outer {
sealed class Inner {
def enclosing = Outer.this
}
def useInner(x:Inner) : Boolean
}
def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
O derleme değil ve scala 2.8 şikayetçi: Programming Scala: Nested classes ve A Tour of Scala: Inner Classes itibaren
type mismatch; found: sandbox.Outer#Inner
required: _81.Inner where val _81:sandbox.Outer
, sorun olduğunu bana öyle geliyor ki argüman olarak useInner
beklediği belirli Outer
örneğinden bir Inner
örneği .
Bu açıklamanın anlamı nedir ve bu sorunun nasıl çözüleceği nedir?
mümkün mü useInner yerine toBoolean değiştirmek için? –
Eğer "defol" için deneniyorsa (x: y.Inner forSome {val y: Outer}): Boolean = x.enclosing.useInner (x) '(Varoluşsal Türler - Scala referansından Değerler Üzerinden Varoluşsal Niceleme) iş. –