播放模板中的“缺少参数类型”

时间:2016-02-13 09:24:23

标签: scala playframework playframework-2.4 play-templates

我在Play 2.4.6中使用了以下模板定义的块(使用scala 2.11.6和sbt 0.13.8)abd我在以下代码中获得了“mising参数类型”:

@property(budgetId: Int, propertyName: String, value: String, shouldEdit: Boolean = false, displayMethod: Option[String => String] = None) = {
  <div>
    <label class="prop-name">@displayMethod.getOrElse(String => propertyName)(propertyName)</label>
    @shouldEdit ? editable(budgetId, routes.Budgets.update(budgetId), "input", propertyName, value) : <span>@value</span>
  </div>
}

@editable(id: Int, url: Call, inputType: String, name: String, value:String) = {
    <div class="editable"
        data-editable-input="@inputType" data-editable-url="@url"
        data-editable-id="@id" data-editable-property="@name" >@value</div>
}

任何人都有任何想法可能是什么?

1 个答案:

答案 0 :(得分:0)

@displayMethod.getOrElse(String => propertyName)就是问题所在。

String实际上是此处的标识符,而不是String类型。所以你有一些参数名称 String的函数,并且它的类型是未知的。编译器不会将类型推断为String => String,因为Option#getOrElse具有类型参数B >: A,这意味着它不必是String => String(只是有界)在它之下)。

您必须自己提供该类型。最明确的方式是:

@displayMethod.getOrElse((_: String) => propertyName)

现在我们正在声明一个明确String => String的函数,其中_代表我们不关心的单个参数。