我在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>
}
任何人都有任何想法可能是什么?
答案 0 :(得分:0)
@displayMethod.getOrElse(String => propertyName)
就是问题所在。
String
实际上是此处的标识符,而不是String
类型。所以你有一些参数名称 String
的函数,并且它的类型是未知的。编译器不会将类型推断为String => String
,因为Option#getOrElse
具有类型参数B >: A
,这意味着它不必是String => String
(只是有界)在它之下)。
您必须自己提供该类型。最明确的方式是:
@displayMethod.getOrElse((_: String) => propertyName)
现在我们正在声明一个明确String => String
的函数,其中_
代表我们不关心的单个参数。