El diagnóstico del valor de error de compilación de Scala no es miembro de Int.
compilation (3)
Hice un cambio de código dentro de una clase de Scala que había estado funcionando bien. Al intentar compilar la modificación, el compilador escupió el mensaje de error, "el valor a no es un miembro de Int" relacionado con esta línea de código (preexistente):
for (i <- 0 to cColumn -1) { ... }
Investigando un poco, encontré algunos informes de errores sobre el método "para" y también que "a" es aparentemente un método proporcionado dentro de la clase intWrapper (?).
Entonces, en base a esa información, comencé a buscar las declaraciones de importación de mi clase ... no hay tal importación para intWrapper. (P: Siendo ese el caso, ¿cómo se compiló / ejecutó esto en primer lugar?) Lo que lo hace aún más interesante (para mí) es que cuando comencé a hacer una búsqueda global en la base de código para esa importación, terminé accidentalmente la sesión del compilador (sbt) ... pero cuando lo reinicié, la clase compiló muy bien. Sin errores en absoluto. (Y no cambia el código de la sesión anterior)
¿Alguien tiene alguna idea sobre qué podría causar este comportamiento intermitente?
NOTAS:
1) usando Scala 2.10.2 con javac 1.7.0_25
2) el cambio de código a la clase no tuvo nada que ver con la funcionalidad de ejemplo, ni alteró ninguna de las importaciones de la clase
Actualización: Aquí están las declaraciones de variables:
val meta = rs.getMetaData()
val cColumn = meta.getColumnCount()
EDITAR: por sugerencia, aquí están las líneas de prueba (todas compilan bien ahora):
implicitly[scala.Int => scala.runtime.RichInt]
intWrapper(3) to 4
for (i <- 0 to 33 -1) { /* do something smart */ }
for (i <- 0 to cColumn -1) { ... }
EDITAR 2 Aquí está el error completo del compilador:
[error] /path/to/src/file/DBO.scala:329: value to is not a member of Int
[error] for (i <- 0 to cColumn -1) {
[error]
Ese error era repetir ~ 18 veces en la clase. (Es una capa de interfaz DBO-DB); donde DBO.scala es el archivo que contiene el rasgo modificado recientemente.
¿cómo se compila / ejecuta esto en primer lugar?
Por defecto, el contenido de scala.Predef
es importado. Ahí tienes el método intWrapper
que produce un método RichInt
to
.
Probablemente has sombreado el símbolo intWrapper
. Funciona el siguiente:
implicitly[scala.Int => scala.runtime.RichInt]
o esto:
intWrapper(3) to 4
... si no, ahí yace tu problema.
EDITAR : Entonces, como dice que compila, lo que sucede es que reemplaza cColumn
con una constante, por ejemplo
for (i <- 0 to 33 -1) { ... }
? También sería útil publicar el mensaje completo del compilador con la línea indicada, etc.
Sin saber de dónde viene ese error, también podrías intentar solucionarlo construyendo el Range
a mano:
for (i <- Range.inclusive(0, cColumn-1)) { ... }
o
Range.inclusive(0, cColumn-1).foreach { i => ... }
Acabo de encontrar el mismo problema. En mi caso, fue causado por una import
innecesaria, como esta:
import scala.Predef.String
class Test() {
for (t <- 1 to 3) {}
}
Por defecto, Scala importa todo scala.Predef
. LowPriorityImplicits
extiende LowPriorityImplicits
, que incluye una conversión implícita de Int
a RichInt
.
to
está realmente definido en RichInt
, por lo que necesita esta conversión para poder usarlo. Al importar solo una parte de Predef
, pierdo esta conversión. Deshágase de la import
innecesaria y el error desaparece.