游戏框架模板 quote/quotation 规则

playframework template quote/quotation rules

来自首页的playframework教程, https://www.playframework.com/ 培训师将引导您完成一个简单的示例,最终导入一个 javascript (coffeescript) 文件以动态生成列表。

他在 index.scala.html 模板文件中写了这个,所以:

<script type='text/javascript' src='@routes.Assets.at("js/index.js")'></script>

注意,src 属性是单引号,封装的at 方法使用双引号作为它的单个字符串参数。

这与我预期的不太一样,因为我知道 @routes.Assets.at 方法将被结果值替换,我记得它在许多编程语言中很典型(例如,Perl ) 单引号指定 fixed/static 字符串值。但是好吧,我想看到我们正在查看 HTML 脚本标记的属性的开头,这没问题。

Perl:

my $name = "Fred";
print "Hello $name\n";  // prints Hello Fred (with an endline afterwards)
print 'Hello $name\n';  // prints Hello $name\n

https://en.wikibooks.org/wiki/Perl_Programming/Strings

尽管如此,我个人并不喜欢它。而我更喜欢使用相反的方式:

<script type="text/javascript" src="@routes.Assets.at('javascripts/index.js')"></script>

但是,游戏一点也不喜欢这样,结果错误信息是:

"Multiple annotations found at this line:
    - unclosed character literal
    - ')' expected but something 
     found."

这是最出乎意料的,因为它在 HTML 中是允许的, http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2

并且还允许,比如说,在 Java 中。例如:

String test = "this is 'not' a test";

所以,问题是:这背后的逻辑是什么? 我可以在某处找到此文档的 'rules' 吗? 它是特定播放的,还是因为它是某种 Scala 相关文件 (index.scala.html),这是由于 Scala 语法的怪癖? (我刚刚开始研究 Scala)

你必须在这里区分两个不同的级别:HTML 和 Scala。

Scala 首先通过,替换以 @ 符号(以及其他一些已知标识符)开头的内容。因此,让我们删除 Scala 读取和使用的内容:

@routes.Assets.at('javascripts/index.js')

如您所见,该方法被赋予了一个字符文字作为参数,但具有一个字符串内容——这在 Java 中是不可能的(在 Scala 中也不可能)。 这也是它试图在错误消息中告诉您的内容,它找到了一个字符文字和一个字符的开头,但随后字符文字没有终止。

所以逻辑是基本的Java逻辑。这是这些编译模板的棘手问题之一:您必须在脑海中区分通过哪个解析器的内容。

根据所涉及的两种语言的规则,允许以下组合:

<script type='text/javascript' src='@routes.Assets.at("js/index.js")'></script>
<script type='text/javascript' src="@routes.Assets.at("js/index.js")"></script>

请注意,在很多编辑器中,第二个选项的语法高亮会中断,包括上面的代码块