如何访问列表中的对象 - Scala



我的代码如下:

class HuffmanNode(val chars: String, val occurrences: Int) {
override def toString: String = "{" + chars + "|" + occurrences + "}"
def absoluteValue: Int = occurrences
def getChars: String = chars
def getOccurrences: String = occurrences.toString
}
object HuffmanNode {
def apply(chars: String, occurrences: Int): HuffmanNode = {
new HuffmanNode(chars, occurrences)
}
}

我正在尝试创建一个HuffmanNode列表,例如:

val PQ: List[HuffmanNode] = List(HuffmanNode("a", 3), HuffmanNode("b", 3))

如何访问 HuffmanNode 中的方法?

我尝试这样做:

PQ(0).getChars

但是我得到一个错误说,unable to resolve symbol getChars.

问题可能是什么?

您的代码无法编译。如果我冒昧地猜测,我会想象您使用的是单例列表而不是类的实例(单例没有 getChars 方法,只有应用)。

如果您按照我在编辑中的建议更改代码,则调用getChars方法没有问题:

class HuffmanNode(val chars: String, val occurrences: Int) {
override def toString: String = "{" + chars + "|" + occurrences + "}"
def absoluteValue: Int = occurrences
def getChars: String = chars
def getOccurrences: String = occurrences.toString
}
object HuffmanNode {
def apply(chars: String, occurrences: Int): HuffmanNode = {
new HuffmanNode(chars, occurrences)
}
}
val PQ: List[HuffmanNode] = List(HuffmanNode("a", 3), HuffmanNode("b", 3))
PQ(1).getChars

我得到了:

PQ: List[HuffmanNode] = List({a|3}, {b|3})
res0: String = b

但是我需要(只是为了测试)从absoluteValue方法中删除关键字覆盖。

正如@Assaf Mendelson所指出的,你指的是单例对象而不是类的实例。

为了修复你的代码,你应该创建类的实例,而不是像:

val PQ = List(HuffmanNode("blabla", 2))
val chars = PQ(0).getChars // now compiles

最新更新