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 块将很好地执行,但第二个 if 块将失败并出现一些 SyntaxError (Missing if at...Cannot have more than one else at ...)。我看不出这两个块之间有任何语法差异。每次我用一些功能性的东西“即时”生成布尔值时,我都会遇到这个问题。我不允许这样做吗?

例如,如果我将第二个块更改为以下内容,它确实有效:

#{
    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