2016-02-13 79 views
2

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

@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

您是否可以更新您的问题以包含错误的详细信息? – Ryuu

回答

0

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

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

你必须自己提供类型。最明显的办法是说:

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

现在,我们宣布一个函数,明确String => String,其中_表示我们不关心的一个参数。

+0

不错的地方,谢谢! – cipacda