scala:value不是ListNode[Int]的成员



我再说一遍,如果这个问题对你来说很愚蠢,欢迎新手使用scala和downpvote。。。

好的,我有一个名为"ListNode"的case类,下面是我得到的错误:

scala> case class ListNode[Int](vl: Int, nt: ListNode[Int] = null) {
     |     def value: Int = vl
     |     def next: ListNode[Int] = nt
     | }
defined class ListNode
scala> var a = ListNode(1)
a: ListNode[Int] = ListNode(1,null)
scala> var b = ListNode(2)
b: ListNode[Int] = ListNode(2,null)
scala> a.next = b
<console>:11: error: value next_= is not a member of ListNode[Int]
       a.next = b
         ^

我读过这个、这个、这个和这个,但仍然不明白它的意思。。。

为什么我不能像在Java中那样,将下一个节点设置为另一个节点?

非常感谢。

我看到两个问题(可能还有更多)。

1-您的类型参数应该是一个参数,而不是Int规范。

2-如果要重新分配next的值,则它需要是var

case class ListNode[T](vl: T, nt: ListNode[T] = null) { 
    val value: T = vl
    var next: ListNode[T] = nt
} 
scala> val a = ListNode(1)
a: ListNode[Int] = ListNode(1,null)
scala> val b = ListNode(2)
b: ListNode[Int] = ListNode(2,null)
scala> a.next = b
a.next: ListNode[Int] = ListNode(2,null)

当然,作为一个案例类,它可以大大简化。

// this is all you need
case class ListNode[T](value: T, var next: ListNode[T] = null)

这是因为您使用的是def,它是一个函数。您可能想要使用vars来定义case类。

下面的代码会起作用,但您可能需要重新考虑可变事例类的整个概念。

case class ListNode[Int](v1:Int, nt:ListNode[Int]=null) {
  var _nt = nt
  def value: Int = v1
  def next: ListNode[Int] = _nt
  def next_=( newNext:ListNode[Int] ) = { _nt = newNext }
}
scala> val a = ListNode(1,null)
a: ListNode[Int] = ListNode(1,null)
scala> a.next = ListNode(2,null)
a.next: ListNode[Int] = ListNode(2,null)

请注意,理想情况下,更改案例类是通过复制完成的:

scala> a.copy( v1=500 )
res0: ListNode[Int] = ListNode(500,null)

此外,如果某个东西可能是null,你可以考虑用Option包装它。。。但我认为这是一个"踢轮胎"代码,而不是生产代码:-)。

Scala中的Case类是不可变的,这意味着您不能更改它们的值。在这种情况下,即使您没有使用case类,next也是一个函数(它是用def定义的),因此尝试为其赋值是没有意义的。

另外,在Scala中使用null不是一个好的做法。最好使用Option类。有几种方法可以更改代码来解决问题。如果您想使用可变类,请考虑以下内容:

class ListNode[Int](value: Int, nt: Option[ListNode[Int]] = None) {
  var next = nt
}
object ListNode {
  def apply(value: Int, nt: Option[ListNode[Int]] = None) = new ListNode[Int](value, nt)
}
var a = ListNode(1)
var b = ListNode(2)
a.next = Some(b)

最新更新