为什么Scala编译器说该副本不是我的case类的成员?
发布时间:2020-12-16 09:56:26 所属栏目:安全 来源:网络整理
导读:首先,这是在 Scala 2.8中,所以它应该在那里! =) 我正在研究Lift的Javascript对象,我希望得到以下内容: case class JsVar(varName: String,andThen: String*) extends JsExp { // ... def -(right: String) = copy(andThen=(right :: andThen.toList.revers
首先,这是在
Scala 2.8中,所以它应该在那里! =)
我正在研究Lift的Javascript对象,我希望得到以下内容: case class JsVar(varName: String,andThen: String*) extends JsExp { // ... def -&(right: String) = copy(andThen=(right :: andThen.toList.reverse).reverse :_*) } 不幸的是,我收到以下编译器错误: [error] Lift/framework/web/webkit/src/main/scala/net/liftweb/http/js/JsCommands.scala:452: not found: value copy [error] def -&(right: String) = copy(andThen=(right :: andThen.toList.reverse).reverse :_*) [error] case类有属性,所以应该有一个copy方法,对吗? 如果我尝试this.copy,我几乎得到同样的错误: [error] Lift/framework/web/webkit/src/main/scala/net/liftweb/http/js/JsCommands.scala:452: value copy is not a member of net.liftweb.http.js.JE.JsVar [error] def -&(right: String) = this.copy(andThen=(right :: andThen.toList.reverse).reverse :_*) [error] 为什么这样,我如何在我的case类方法中使用copy?或者认为复制是编译器在声明我的方法后添加的东西? 我应该这样做吗? case class JsVar(varName: String,andThen: String*) extends JsExp { // ... def -&(right: String) = JsVar(varName,(right :: andThen.toList.reverse).reverse :_*) } 解决方法
规范在这方面没有提及,但这实际上是预期的.复制方法取决于默认参数,重复参数(varargs)不允许使用默认参数:
(Scala参考,第4.6.2节 – 重复参数) scala> def f(xs: Int*) = xs f: (xs: Int*)Int* scala> def f(xs: Int* = List(1,2,3)) = xs <console>:24: error: type mismatch; found : List[Int] required: Int* def f(xs: Int* = List(1,3)) = xs ^ <console>:24: error: a parameter section with a `*'-parameter is not allowed to have default arguments def f(xs: Int* = List(1,3)) = xs ^ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |