Scala / Play错误重载的方法值[元组]无法应用于

时间:2014-05-24 16:07:18

标签: scala playframework

Scala / Play错误@Overloaded方法值[tuple]无法应用于: 请参阅以下代码

def getPropertyFromRequest(implicit request: Request[AnyContent]): (Property, Option[ObjectId], Option[ObjectId], Option[ObjectId]) = {
    val p =
      Form(tuple(
        "desc" -> text,
        "url" -> text,
        "image" -> text,
        "price" -> text,
        "sqft" -> text,
        "address2" -> text,
        "lotsize" -> text,
        "taxes" -> text,
        "status" -> optional(text),
        "maint" -> text,
        "address" -> text,
        "mls" -> text,
        "baths" -> text,
        "beds" -> text,
        "partial_baths" -> text,
        "propertyId" -> optional(text),
        "snoopId" -> optional(text),
        "year_built" -> text,
        "groupId" -> optional(text) //upon adding this, error show up
      )).bindFromRequest().fold(
          errors => {Logger.error(errors.toString())
            throw new Error("could not parse form")},
          success => success
      )

      val a = GeoCoder.create(p._11 + " " + p._6)
      val property = Property(url = p._2,
        description = p._1,
        image = p._3,
        price = parseAmount(p._4).toDouble,
        sqft = p._5,
        lotSize = p._7,
        taxes = parseAmount(p._8),
        status = PropertyStatus.ACTIVE,
        maintenance = parseAmount(p._10),
        mls = p._12,
        baths = try{p._13.toDouble}catch{case e => 0},
        beds = try{p._14.toInt}catch{case e=> 0},
        partialBaths = try{p._15.toInt}catch{case e => 0},
        address = a,
        yearBuilt = Some(p._18))

      ( property, p._16.map(new ObjectId(_)) ,p._17.map(new ObjectId(_)), p._19.map(new ObjectId(_)) )
  }

注意: 此代码工作正常,但在元组列表中添加 groupID 时,会显示错误。 根据我的研究,元组只有22max元素,但是这个元素高达19个,所以不确定是什么时候发生的。

先谢谢

1 个答案:

答案 0 :(得分:1)

Forms中的tuple方法仅重载最多18个元组。

我不知道为什么Play会在18岁时停止,这似乎是22的任意。

有几种解决方法。为更大的arity元组编写自己的tuple方法,或者使用嵌套的映射器。