【问题标题】:'Missing parameter type' in Play template播放模板中的“缺少参数类型”
【发布时间】:2016-02-13 09:24:23
【问题描述】:

我在 Play 2.4.6(使用 scala 2.11.6 和 sbt 0.13.8)中有以下模板定义块,并且我在以下代码中得到“缺少参数类型”:

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

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

【问题讨论】:

  • 您能否更新您的问题以包含错误的详细信息?

标签: scala playframework playframework-2.4 play-templates


【解决方案1】:

@displayMethod.getOrElse(String =&gt; propertyName) 是问题所在。

String 在这里实际上是一个标识符,而不是String 类型。所以你有一些带有 参数名称 String 的函数,它的类型是未知的。编译器不会将类型推断为String =&gt; String,因为Option#getOrElse 有一个类型参数B &gt;: A,这意味着它不必是String =&gt; String(只是在它的下方限定)。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2023-03-07
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多