如何访问列表中的对象-Scala
我的代码如下:如何访问列表中的对象-Scala,scala,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 = occur
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
但是我得到一个错误,说,无法解析符号getChars
可能是什么问题?您的代码无法编译。如果我冒昧猜测一下,我会设想您使用的是单例列表而不是类的实例(单例没有getChars方法,只有apply)。正如@Assaf Mendelson所指出的,您引用的是单例对象而不是类的实例 为了修复代码,您应该创建类的实例,如下所示:
val PQ = List(HuffmanNode("blabla", 2))
val chars = PQ(0).getChars // now compiles
如果您按照我在编辑中的建议更改代码,则调用
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
方法中删除关键字覆盖。对!我在做你刚才说的said@Vasu,如果答案有帮助,您应该将其标记为已接受。实际上,拥有一个带有应用程序的对象的全部意义不是使用new yourself,而是使用val PQ=List(HuffmanNode(“blablabla”,2))