Scala 在正在使用的模板调用中将函数作为参数调用

Scala 在正在使用的模板调用中将函数作为参数调用,scala,templates,playframework,twirl,play-templates,Scala,Templates,Playframework,Twirl,Play Templates,游戏中/斯卡拉;我不明白这为什么不能编译: @(tabNames: Seq[String]) @isActive(idx: Int) = { @if(idx < 1) { "active" } else { "" } } <ul class="nav nav-tabs"> @for((tab, idx) <- tabNames.zipWithIn

游戏中/斯卡拉;我不明白这为什么不能编译:

   @(tabNames: Seq[String])

   @isActive(idx: Int) = {
       @if(idx < 1) {
           "active"
       } else {
           ""
       }
   }

   <ul class="nav nav-tabs">
       @for((tab, idx) <- tabNames.zipWithIndex) {
           @views.html.generic.navLi("tab" + idx.toString, tab, isActive(idx))
       }
   </ul>
@(选项卡名:Seq[String])
@isActive(idx:Int)={
@if(idx<1){
“活动”
}否则{
""
}
}
    @对于((tab,idx);虽然在twirl模板中声明“函数”肯定是可能和有用的,但返回类型似乎(有效地)被锁定为
    Html
    ——即您的“块”(如文档中所述)必须呈现Html。

    正如文档中所建议的,最快的解决方案是将逻辑重新定位到Scala类中;对于像这样简单的事情,
    对象
    是实现这一点的最简单方法,即:

    package views
    
    object ViewHelper {
    
      def isActive(idx: Int):String = {
        if(idx < 1) {
          "active"
        } else {
          ""
        }
      }
    }
    
    包视图
    对象视图辅助对象{
    def isActive(idx:Int):字符串={
    if(idx<1){
    “活动”
    }否则{
    ""
    }
    }
    }
    
    以及:

      @for((tab,idx)对

      • 可重用代码块
      • 可重用的代码块
      注意这两种语言在
      @
      用法上的细微差别

      @isActive(idx: Int) = {
        @if(...
      
      @isActive(idx: Int) = @{
        if(...
      
      可重用纯代码块可以具有任意返回类型。在您的情况下,要将
      String
      作为返回类型,您可以编写:

         @isActive(idx: Int) = @{
             if(idx < 1) {
                 "active"
             } else {
                 ""
             }
         }
      
      @isActive(idx:Int)=@{
      if(idx<1){
      “活动”
      }否则{
      ""
      }
      }
      
      是-文档对这个主题肯定很轻松。您确定
      视图
      包是放置此
      对象的最佳位置吗
      ?我还注意到您没有导入
      视图帮助程序
      -是这样吗?谢谢,将其放置在
      视图中
      我不需要导入它:-)
         @isActive(idx: Int) = @{
             if(idx < 1) {
                 "active"
             } else {
                 ""
             }
         }