Подтвердить что ты не робот

Объект не является ошибкой значения в scala

При попытке сделать карту в Scala, я получаю следующее сообщение об ошибке: object Map не является значением

Код, который я использую, следующий:

val myStringMap =  Map[String, String]("first" -> "A", "second" -> "B", "third" -> "C")

Я очень озадачен тем, почему я не могу создать эту карту, потому что, посмотрев на документацию Scala, мне кажется, что синтаксис моего кода правильный.

4b9b3361

Ответ 1

Когда вы видите ошибку "объект не является значением", это обычно означает, что тип внутри области видимости - это тип Java - вы, вероятно, импортируете java.util.Map в область

scala> Map(1 -> "one")
res0: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> one)

Но

scala> import java.util.Map
import java.util.Map

scala> Map(1 -> "one")
<console>:9: error: object Map is not a value
              Map(1 -> "one")
              ^

Помните, что в scala каждый класс поставляется с (необязательным) сопутствующим объектом, который является значением. Это не относится к классам Java.

Ответ 2

Я получил аналогичную ошибку в списках. попробуйте в консоли scala:

import java.util.List object test { def a():List[String] = { val list = List[String](); null }}

вы получите err "Object List is not a value."

Вы получаете его, потому что скрываете встроенный тип List, потому что List отличается от java.util.List

Что делать, если кто-то хочет использовать util.List?

вы можете использовать квалифицированное имя или импорт переименования

! import java.util. {List = > JList}

import java.util. {List = > JList}

Ответ 3

Просто нашел это, поэтому, возможно, будет полезно поделиться моим решением. Если вы импортировали java.util.Map и вам нужно использовать scala.collection.immutable.Map, то используйте его с полным именем, а вместо

 Map(1 -> "one")

делать

scala.collection.immutable.Map(1 -> "one")

Таким образом, он будет знать, что вы имеете в виду

Ответ 4

Поскольку в scala каждый родной класс scala поставляется с (необязательным) сопутствующим объектом (позволяющим назначать из объекта-компаньона, как в вашем примере кода) при включении класса java в код scala всегда помнить о создании экземпляра класс, вызвав конструктор, т.е. используйте ключевое слово "new", создав таким образом значение.