'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
,其中 _
表示我们不关心的单个参数。
我在 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
,其中 _
表示我们不关心的单个参数。