1

次のダミー 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

ここで何が起こっているのですか?

4

0 に答える 0