如何在 Scala 中引用自己的 class?
How to reference own class in scala?
class Node(var x: Int, var y: Int, var prev: Node)
{
def getpath(): String =
{
var tempnode = this(prev);
while(tempnode.prev != null)
{
tempnode = tempnode.prev;
}
return tempnode
}
}
这是代码,但是不起作用,方法getpath()中我想引用当前节点class到一个变量中,然后向后遍历前面的节点,我怎么办完全在 Scala 中完成这个?
这是 Scala。我们不使用 var
。我们不引用 null
。我们不需要分号 ;
,我们也不使用 return
.
case class Node(x: Int, y: Int, prev: Option[Node]) {
def getpath: String =
prev.fold(s"($x,$y)")(_.getpath + s" -> ($x,$y)")
}
@jwvh 点(都很好!)尽管如此,您编写的代码似乎正在寻找 root/head 而不是路径。
case class Node(x: Int, y: Int, prev: Option[Node]) {
@tailrec
def head: Node = prev match {
case Some(node) => node.head
case None => this
}
}
或者如果你真的想要路径:
(这类似于@jwvh 的回答,但是是尾递归,这意味着它在运行时被重写为循环,当你的路径长度很大时,这可能变得很重要) .
@tailrec
def path(acc: List[Node] = Nil): List[Node] = prev match {
case Some(node) => node.path(this :: acc)
case None => this :: acc
}
class Node(var x: Int, var y: Int, var prev: Node)
{
def getpath(): String =
{
var tempnode = this(prev);
while(tempnode.prev != null)
{
tempnode = tempnode.prev;
}
return tempnode
}
}
这是代码,但是不起作用,方法getpath()中我想引用当前节点class到一个变量中,然后向后遍历前面的节点,我怎么办完全在 Scala 中完成这个?
这是 Scala。我们不使用 var
。我们不引用 null
。我们不需要分号 ;
,我们也不使用 return
.
case class Node(x: Int, y: Int, prev: Option[Node]) {
def getpath: String =
prev.fold(s"($x,$y)")(_.getpath + s" -> ($x,$y)")
}
@jwvh 点(都很好!)尽管如此,您编写的代码似乎正在寻找 root/head 而不是路径。
case class Node(x: Int, y: Int, prev: Option[Node]) {
@tailrec
def head: Node = prev match {
case Some(node) => node.head
case None => this
}
}
或者如果你真的想要路径: (这类似于@jwvh 的回答,但是是尾递归,这意味着它在运行时被重写为循环,当你的路径长度很大时,这可能变得很重要) .
@tailrec
def path(acc: List[Node] = Nil): List[Node] = prev match {
case Some(node) => node.path(this :: acc)
case None => this :: acc
}