Поля картографических данных Scala для списка классов case [duplicate]

Чтобы решить эту проблему, я импортировал некоторые JAR-файлы в свой проект:

  • javax.activation-1.2.0.jar

http://search.maven.org/remotecontent?filepath=com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar

  • jaxb-api-2.3.0.jar

http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3. 0 / jaxb-api-2.3.0.jar

  • jaxb-core-2.3.0.jar

http: //search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar

  • jaxb-impl-2.3.0.jar

http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/ 2.3.0 / jaxb-impl-2.3.0.jar

  1. Загрузите вышеуказанные файлы и скопируйте их в папку libs в проекте
  2. Добавьте импортированный JAR файлы в пути сборки Java

4
задан zero323 27 May 2016 в 08:15
поделиться

1 ответ

Вот трюк. Позволяет открыть REPL и определить класс:

scala> case class Foo(i: Int)
defined class Foo

и простую функцию, которая работает с этим классом:

scala> def fooToInt(foo: Foo) = foo.i
fooToInt: (foo: Foo)Int

переопределить класс:

scala> case class Foo(i: Int)
defined class Foo

и создать экземпляр:

scala> val foo = Foo(1)
foo: Foo = Foo(1)

Все, что осталось, - вызвать fooToInt:

scala> fooToInt(foo)
<console>:34: error: type mismatch;
 found   : Foo(in class $iwC)(in class $iwC)(in class $iwC)(in class $iwC)
 required: Foo(in class $iwC)(in class $iwC)(in class $iwC)(in class $iwC)
          fooToInt(foo)

Он выглядит знакомым? Еще один трюк, чтобы лучше понять, что происходит:

scala> case class Foo(i: Int)
defined class Foo

scala> val foo = Foo(1)
foo: Foo = Foo(1)

scala> case class Foo(i: Int)
defined class Foo

scala> def fooToInt(foo: Foo) = foo.i
<console>:31: error: reference to Foo is ambiguous;
it is imported twice in the same scope by
import INSTANCE.Foo
and import INSTANCE.Foo
         def fooToInt(foo: Foo) = foo.i

. Короче говоря, это ожидаемое, хотя и слегка запутанное поведение, которое возникает из неоднозначных определений, существующих в той же области.

Если вы не хотите периодически :reset REPL state, вы должны отслеживать созданные вами сущности и, если изменения типов определений, убедитесь, что неопределенные определения не сохраняются (переписывайте вещи, если необходимо), прежде чем продолжить.

4
ответ дан zero323 27 August 2018 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: