'Missing parameter type' 在 Play 模板中

'Missing parameter type' in Play template

我在 Play 2.4.6 中有以下模板定义块(使用 scala 2.11.6 和 sbt 0.13.8)abd 我在以下代码中得到 "mising parameter type":

@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>
}

有人知道为什么会这样吗?

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

String这里其实是一个标识符,并不是String这个类型。所以你有一些带有 参数名称 String 的函数,并且它的类型是未知的。编译器不会推断类型为 String => String,因为 Option#getOrElse 有一个类型参数 B >: A,这意味着它不必是 String => String它)。

您必须自己提供类型。最清楚的方法是说:

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

现在我们要显式声明一个函数 String => String,其中 _ 表示我们不关心的单个参数。