Veo este código en este blog: Programación de nivel de tipo en 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]
}
Hay un operador #en el código R#X[R#Next]que nunca he visto. Dado que es difícil buscarlo (ignorado por los motores de búsqueda), ¿quién puede decirme qué significa?
scala
type-systems
Viento libre
fuente
fuente

Respuestas:
Para explicarlo, primero tenemos que explicar las clases anidadas en Scala. Considere este simple ejemplo:
Ahora intentemos algo con eso:
Cuando declaras una clase dentro de otra clase en Scala, estás diciendo que cada instancia de esa clase tiene dicha subclase. En otras palabras, no hay
A.Bclase, pero haya1.Bya2.Bclases, y son diferentes clases, como el mensaje de error nos dice más arriba.Si no entendió eso, busque los tipos dependientes de la ruta.
Ahora,
#le permite referirse a tales clases anidadas sin restringirlo a una instancia particular. En otras palabras, no hayA.B, pero hayA#B, lo que significa unaBclase anidada de cualquier instancia deA.Podemos ver esto en el trabajo cambiando el código anterior:
Y probándolo:
fuente
Classes una representación en tiempo de ejecución de las clases de Java, y está limitada incluso en Java. Por ejemplo,List<String>yList<Integer>tener el mismo tiempo de ejecuciónClass. SiClassno es lo suficientemente rico como para representar tipos de Java , es casi inútil cuando se representan tipos de Scala . Una vez más, a lares7: Class[A#B] = class A$Bizquierda del signo igual es un tipo, a la derecha del tipo igual si un valor que es la representación en tiempo de ejecución Java de una clase.Se conoce como proyección de tipo y se usa para acceder a los miembros de tipo.
fuente
Básicamente, es una forma de referirse a clases dentro de otras clases.
http://jim-mcbeath.blogspot.com/2008/09/scala-syntax-primer.html (busque "libra")
fuente
Aquí hay un recurso para buscar "operadores simbólicos" (que son realmente métodos), pero no he descubierto cómo escapar de "#" para buscar en scalex)
http://www.artima.com/pins1ed/book-index.html#indexanchor
fuente