gpt4 book ai didi

java - playframework模板报价/报价规则

转载 作者:行者123 更新时间:2023-12-01 10:40:47 25 4
gpt4 key购买 nike

从首页的 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)中很典型单引号指定固定/静态字符串值。但是好吧,我想当我们查看 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";

那么,问题是:这背后的逻辑是什么?我可以在某处找到记录的“规则”吗?它是特定于 Play 的,还是因为它是某种 Scala 相关文件 (index.scala.html),所以它是由于 Scala 语法的问题造成的?(我刚刚开始了解 Scala)

最佳答案

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

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

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

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

所以逻辑是基本的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>

请注意,在许多编辑器中,第二个选项的语法突出显示将会中断,包括上面的代码块

关于java - playframework模板报价/报价规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34415643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com