object.type不接受参数错误

时间:2014-02-27 06:18:16

标签: scala playframework functional-programming

以下是我在使用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, "Tom", "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)
)

1 个答案:

答案 0 :(得分:7)

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

上述意味着,在Scala REPL中,您使用第二个代码块创建了一个带有伴随对象的类;相反,您创建了Product案例类,并使用新的Product模块将然后“阴影化”了它。

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

关于您的第二个问题 - apply是一种应用方法(您使用foo(...)调用的内容 - 例如,所有FunctionN个实例都拥有它),unapply为{{ 3}}(用于模式匹配 - 案例类用于“免费”)。