次のダミー SSP ファイルを検討してください。
#{
val testMap1 = Map("a" -> true, "b" -> true, "c" -> true)
val testMap2 = Map("d" -> false, "e" -> false, "f" -> true)
val something = true
val value = 3
}#
<html>
<head>
<title>Test</title>
</head>
<body>
#if(something)
<h1>True</h1>
#elseif(value > 2)
<h1>False, but higher</h1>
#else
<h1>False</h1>
#end
#if(testMap1.forall(_._2) && testMap2.forall(_._2))
<h1>All true</h1>
#elseif(testMap1.forall(_._2) || testMap2.forall(_._2))
<h1>One map true</h1>
#else
<h1>Neither</h1>
#end
これは次のようにレンダリングされます。
import java.io.File
import org.fusesource.scalate.{ TemplateSource, TemplateEngine }
val engine = new TemplateEngine()
val file = new File("path/to/file.ssp")
engine.layout(TemplateSource.fromFile(file))
これは失敗します。
最初の if ブロックは問題なく実行されますが、2 番目の if ブロックは何らかの SyntaxError (Missing if at...
またはCannot have more than one else at ...
) で失敗します。2 つのブロックに構文の違いは見られません。機能的なものを使用して「オンザフライ」でブール値を生成するたびに、この問題に遭遇します。これを行うことは許可されていませんか?
たとえば、2 番目のブロックを次のように変更すると、機能します。
#{
val testMap1true = testMap1.forall(_._2)
val testMap2true = testMap2.forall(_._2)
}#
#if(testMap1true && testMap2true)
<h1>All true</h1>
#elseif(testMap1true || testMap2true))
<h1>One map true</h1>
#else
<h1>Neither</h1>
#end
ここで何が起こっているのですか?