Bu nedir `#` operatör Scala için ne ifade ediyor?
Bu blog bu kodu görüyorum: Type-Level Programming in Scala:
// define the abstract types and bounds
trait Recurse {
type Next <: Recurse
// this is the recursive function definition
type X[R <: Recurse] <: Int
}
// implementation
trait RecurseA extends Recurse {
type Next = RecurseA
// this is the implementation
type X[R <: Recurse] = R#X[R#Next]
}
object Recurse {
// infinite loop
type C = RecurseA#X[RecurseA]
}
Daha önce hiç görmediğim bir operatör kodu #
R#X[R#Next]
var. Zor kim söyleyebilir(arama motorları tarafından dikkate alınmaz) arama, o zamandan beri ne anlama geliyor?
CEVAP
Bunu açıklamak için, öncelikle Scala iç içe sınıflar açıklamak zorunda. Bu basit bir örneği ele alalım
class A {
class B
def f(b: B) = println("Got my B!")
}
Şimdi onunla bir şeyler deneyin:
scala> val a1 = new A
a1: A = A@2fa8ecf4
scala> val a2 = new A
a2: A = A@4bed4c8
scala> a2.f(new a1.B)
<console>:11: error: type mismatch;
found : a1.B
required: a2.B
a2.f(new a1.B)
^
Scala başka bir sınıf içinde bir sınıf bildirirken, " diyorsunuzher örneğibu sınıfın büyük bir alt sınıfı. Diğer bir deyişle, A.B
sınıf yok, ama a1.B
a2.B
sınıf var, ve onlarfarklıyukarıdaki hata iletisi bize anlatıyor sınıflar,.
Eğer aklınızı kullanıyorsanız, yolu bağımlı türlerini aramak.
Şimdi, #
belirli bir örnek için kısıtlama olmadan böyle iç içe geçmiş sınıflar başvurmak için yapar. Diğer bir deyişle, A.B
ama B
iç içe geçmiş bir sınıf anlamına gelir A#B
var hayır yokherhangi birA
örneği.
İş bu yukarıdaki kodu değiştirerek görebiliriz:
class A {
class B
def f(b: B) = println("Got my B!")
def g(b: A#B) = println("Got a B.")
}
Ve onu deniyorum:
scala> val a1 = new A
a1: A = A@1497b7b1
scala> val a2 = new A
a2: A = A@2607c28c
scala> a2.f(new a1.B)
<console>:11: error: type mismatch;
found : a1.B
required: a2.B
a2.f(new a1.B)
^
scala> a2.g(new a1.B)
Got a B.
&Quot nedir;=>" PHP için ne if...
Eğer bir dize geçerli bir adres olup o...
Bunu xml dosyasından bir görünüm şişir...
Scala olarak kullanmak için JSON nedir...
İlan için dezavantajları dava sınıflar...