[scala][play framework]拡張for文+ループ変数の同時使用

思った以上に詰まる事項。

scalaテンプレート上で拡張for文を使いつつループ変数も使いたい場合。

  • 失敗例
    @{var i = 0}
    @for(obj <- list) {
        <li>@{i} : @{obj.name}</li>
        @{i = i + 1}   <!-- iが見つからない -->
    }

iはスコープ外なので、コンパイルエラー。

    @{var i = 0
        for(obj <- list) {
            <li>{i} : {obj.name}</li>
            i = i + 1
        }
    }

コンパイルは通るけど何も出力されない。

  • 解決方法

zipWithIndexを使う。

    @for((obj,i) <- list.zipWithIndex) {
        <li>@{i} : @{obj.name}</li>
    }