Scala中的伴随对象不与案例类相关联
发布时间:2020-12-16 10:07:32 所属栏目:安全 来源:网络整理
导读:我在理解为什么这段代码不起作用时遇到了一些麻烦.我从二叉树中的99个 Scala问题中得到了它(http://aperiodic.net/phil/scala/s-99/).它看起来对我有用:Node对象是Node类的伴随对象,它在树上添加叶子的构造函数.但是当我尝试编译它时,我会得到以下结果: co
我在理解为什么这段代码不起作用时遇到了一些麻烦.我从二叉树中的99个
Scala问题中得到了它(http://aperiodic.net/phil/scala/s-99/).它看起来对我有用:Node对象是Node类的伴随对象,它在树上添加叶子的构造函数.但是当我尝试编译它时,我会得到以下结果:
<console>:10: error: too many arguments for method apply: (value: T)Node[T] in object Node def apply[T](value: T): Node[T] = Node(value,End,End) 如果我删除两个Ends,我没有得到任何编译错误,但如果我创建一个具有单个值的Node,我会陷入无限循环.因此看起来应用就是构造更多的Node对象,而不是将自己与Node类相关联. 任何帮助表示赞赏. sealed abstract class Tree[+T] case class Node[+T](value: T,left: Tree[T],right: Tree[T]) extends Tree[T] { override def toString = "T(" + value.toString + " " + left.toString + " " + right.toString + ")" } case object End extends Tree[Nothing] { override def toString = "." } object Node { def apply[T](value: T): Node[T] = Node(value,End) } 解决方法
适合我(见下文).你有没有在同一个文件中定义它们?
Welcome to Scala version 2.9.0.final (Java HotSpot(TM) 64-Bit Server VM,Java 1.6.0_24). Type in expressions to have them evaluated. Type :help for more information. scala> :paste // Entering paste mode (ctrl-D to finish) sealed abstract class Tree[+T] case class Node[+T](value: T,End) } // Exiting paste mode,now interpreting. defined class Tree defined class Node defined module End defined module Node scala> Node("123") res0: Node[java.lang.String] = T(123 . .) scala> 编辑 scala> case class A(i: Int,i2: Int) defined class A scala> object A { | def apply(i: Int): A = A(i,i) | } :25: error: too many arguments for method apply: (i: Int)A in object A def apply(i: Int): A = A(i,i) scala> object A { def apply(i: Int): A = new A(i,i) } defined module A warning: previously defined class A is not a companion to object A. Companions must be defined together; you may wish to use :paste mode for this. 注:我在JIRA上找不到任何增强请求,所以我创建了this issue (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |