Объект не является ошибкой значения в Scala - PullRequest
12 голосов
/ 31 января 2012

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

Я использую следующий код:

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

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

Ответы [ 4 ]

21 голосов
/ 31 января 2012

Когда вы видите ошибку «объект не является значением», это обычно означает, что тип в области видимости - это тип 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.

3 голосов
/ 03 марта 2015

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

 Map(1 -> "one")

do

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

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

1 голос
/ 25 января 2018

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

1 голос
/ 28 апреля 2013

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

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

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

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

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

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

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

import java.util. {List => JList}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...