問題は、中括弧と括弧を使用する方法にありますmap
。括弧内のすべてがscalaコードとして扱われます。htmlを使用したり、@
期待どおりに使用したりすることはできません。中括弧の内側では、好きな@
ように使用できます。
たとえば、これはコンパイルされず、:が発生しexpected start of definition
ます
@(tests: List[(String,Option[List[String]])])
<h3>Tests results</h3>
@tests.map( t => {
<h4>@t._1</h4>
@t._2
})
一方、これはコンパイルされ、想定どおりに機能します。
@(tests: List[(String,Option[List[String]])])
<h3>Tests results</h3>
@tests.map{ t =>
<h4>@t._1</h4>
@t._2
}
テンプレートがscalaコードを解析する方法に問題がありました。彼らがそれをscalaコンパイラがscalaコードを解析する方法で解析するかどうかは完全にはわかりません。以前に読んだことがありますが、いくつかの制限があります。そして、私はあなたに少しずつお見せします。中括弧を切り替えると、ソリューションがコンパイルされ、正常に機能します。そして、あなたはそのようなものになってしまうでしょう:
@(tests: List[(String,Option[List[String]])])
<h3>Tests results</h3>
@tests.map{ t =>
<h4>@t._1</h4>
@defining(t._2) { optLst =>
@optLst match {
case None => {
<p>
<span>
[WARNING] Test failed
</span>
</p>
}
case Some(res) => {
@res.map{r =>
<p>
<span>
@r
</span>
</p>
}
}
}
}
}
これは、それを行うための最も慣用的な方法ではありません。私はおそらくそこでパターンマッチングの代わりに地図を使うでしょう。しかし、あなたに合ったものを使用してください。ここでのポイントは@defining
そこにあるということです。気づきましたか?t._2と直接一致させようとすると、')' expected but 'case' found.
例外が発生します。私にとって奇妙なことは何ですか。そして、私は以前にそれを見つけました、そして私はこれが現在のエンジンの問題であり、あなたが値を定義しそしてそれをあなたが望むように一致させなければならないことを見つけるためにそれをたくさんグーグルで調べました。
乾杯!