djm*_*djm 1 dictionary scala list
最近几天我正在尝试学习scala,所以请耐心等待。
我对访问 scala 中的列表元素有点困惑。如果直接从列表访问它,apply方法就可以工作,但是如果它在地图内,则会出现错误。
以下是我正在尝试做的事情 -
val m1 = List(1, 3, 5, 2)
val res = m1.apply(3)
//Output
m1: List[Int] = List(1, 3, 5, 2)
res: Int = 2
Run Code Online (Sandbox Code Playgroud)
当从地图内完成时,它会抛出错误 -
val m2 = Map(3 -> List(2, 3, 4, 5), 4 -> "for", 2 -> "cs")
print(m2(3).apply(2))
Error:An error was encountered:
<console>:27: error: value apply is not a member of java.io.Serializable
print(m2(3).apply(2))
^
Run Code Online (Sandbox Code Playgroud)
我也m2(3)(2)按照一些线程中的建议进行了尝试,但得到了<console>:27: error: java.io.Serializable does not take parameters
请让我知道到底哪里出了问题。从python后台我们可以直接访问它m2[3][2]
Scala 是一种静态类型编程语言。这意味着编译器在编译时确定变量的类型。Map编译器将根据传递的元素推断类型,并且m2类型将是Map[Int, Serializable](我假设您使用的是 Scala 2 编译器),其中Serializable没有apply带参数的方法。快速而肮脏的方法将通过以下方式进行转换asInstanceOf:
m2(3).asInstanceOf[List[Int]].apply(3)
Run Code Online (Sandbox Code Playgroud)
但总的来说,这是非常不鼓励的做法。您应该考虑使用类型安全技术对您的域进行建模。