Ошибка времени компиляции в Scala Map, когда я помещаю объект внутрь - PullRequest
1 голос
/ 08 июля 2019

У меня есть одна Карта, содержащая два объекта Scala в качестве значения и уникальную строку.

val vv = Map("N"-> Nconstant, "M"-> Mconstant) 

Здесь Nconstant и Mconstant - это два объекта с постоянными значениями. После этого я пытаюсь получить доступ к постоянной переменной внутри этого объекта, передав ключ ниже,

val contract = vv("N").contractVal 

contractVal - это переменная, которая имеет значения и находится внутри Mconstant и Nconstant. Но IntelliJ показывает

«Не удается разрешить символ contractVal».

Может кто-нибудь помочь с этим вопросом?

Ответы [ 2 ]

1 голос
/ 08 июля 2019

В дополнение к ответу Тима, если у вас есть типы, которые имеют общее поле, но не имеют общего типа, вы можете использовать duck typing :

object Nconstant {
  val contractVal = "N"
}

object Mconstant {
  val contractVal = "M"
}

val vv = Map("N"-> Nconstant, "M"-> Mconstant, "X" -> Xconstant)

import scala.language.reflectiveCalls

vv("N").asInstanceOf[{ val contractVal: String }].contractVal //N

Но будьте осторожны, во время выполнения произойдет сбой, если N не имеет contractVal поля!

1 голос
/ 08 июля 2019

Похоже, Nconstant и Mconstant - это разные типы, которые имеют одно и то же поле contractVal.Если это так, вам нужно определить, какой тип у вас есть, используя match:

val contract = vv("N") match {
    case n: Nconstant => n.contractVal
    case m: Mconstant => m.contractVal
  }

. Вы получите MatchError, если значение не равно Nconstant или Mconstant.

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