加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – object.type不接受参数错误

发布时间:2020-12-16 09:58:00 所属栏目:安全 来源:网络整理
导读:以下是我在使用 scala book时使用的代码片段.它在框架中运行良好,但是当我尝试在commndline中它会给出错误 error: Product.type does not take parameters var products = Set(Product(5018206244611L,"Tom","Zebra")) 以下是我使用的代码 case class Produc
以下是我在使用 scala book时使用的代码片段.它在框架中运行良好,但是当我尝试在commndline中它会给出错误

error: Product.type does not take parameters
     var products = Set(Product(5018206244611L,"Tom","Zebra"))

以下是我使用的代码

case class Product(ean: Long,name: String,description: String)
object Product {
  var products = Set(Product(5018206244611L,"Zebra"))
  def findAll = products.toList.sortBy(_.ean)
}

在其中一个控制器文件教程中使用Product.apply和Product.unapply. Product.apply和Product.unapply在未在对象内定义时指示什么,并在我在控制台中键入时给出错误. FOllowing是使用Product.apply和Product.unapply的代码

private val productForm: Form[Product] = Form(
  mapping(
    "ean" -> longNumber.verifying(
      "validation.ean.duplicate",Product.findByEan(_).isEmpty),"name" -> nonEmptyText,"description" -> nonEmptyText)(Product.apply)(Product.unapply)
)

解决方法

与“普通”编译相比,Scala REPL(命令行)有一些差异.除了无法定义包之外,另一个主要的是它逐行执行语句.

上面的意思是,在Scala REPL中,你没有用你的第二个代码块创建一个带有伴随对象的类;相反,您创建了Product case类,然后使用新的Product模块“遮蔽”它.

解决方案是在REPL中使用:paste命令,以便您同时输入两个定义.

关于你的第二个问题 – apply是一个应用程序方法(你用foo调用的函数(…) – 例如所有的FunctionN实例都有它),unapply是an extractor method(用于模式匹配 – case类获取它为“free”) .

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读