gpt4 book ai didi

templates - Play 2.0 - 在模板中映射 `map` 或 `for-yield` 结果

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

我要执行两个顺序 map Play 2.0 模板中的操作。我试过这样:

@defining(for(a <- as) yield { doSmthWith(a); doSmthWith2(a) })
{ aaas => aaas.map(_.toString).mkString("|") } /*CRASH*/

我认为它相当于普通的 Scala:
val aaas = for(a <- as) yield { doSmthWith(a); doSmthWith2(a) }
println(aaas.map(_.toString).mkString("|"))

但它在第一个 { 上崩溃了说 expected start of definition ...

就像我更换 for 一样使用常规 map 循环:
@(as.map(a => { doSmthWith(a); doSmthWith2(a) })).map(_.toString).mkString("|"))

在第一个 } 上发生同样的崩溃标志。如何在 Play 模板中实现顺序映射?

更新:

堆栈 - 在这里! - 直接从控制台:
sbt.PlayExceptions$CompilationException: Compilation error [expected start of de
finition]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$2$$anonfun$apply$
11$$anonfun$apply$12.apply(PlayReloader.scala:224) ~[na:na]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$2$$anonfun$apply$
11$$anonfun$apply$12.apply(PlayReloader.scala:224) ~[na:na]
at scala.Option.map(Option.scala:133) ~[scala-library.jar:0.11.2]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$2$$anonfun$apply$
11.apply(PlayReloader.scala:224) ~[na:na]
at sbt.PlayReloader$$anon$2$$anonfun$reload$3$$anonfun$2$$anonfun$apply$
11.apply(PlayReloader.scala:221) ~[na:na]
at scala.Option.map(Option.scala:133) ~[scala-library.jar:0.11.2]

堆栈说 smth 关于 Option但我不会在这里的任何地方使用它们。一定是一些内部运作。

最佳答案

这有效:

@defining(for (a <- List(1,2,3)) yield { 
play.api.Logger.debug("a:" + a)
a*3
}) { as =>
@(as.mkString("|"))
}

其中显示 3|6|9在页面中并在控制台中打印:
[debug] application - a:1
[debug] application - a:2
[debug] application - a:3

所以我的猜测是添加 @在表达式前面签名并将左大括号放在与定义中的右括号相同的行上将使其工作(假设 doSmthWith2(a) 实际上返回除单位以外的其他内容):
@defining(for(a <- as) yield { doSmthWith(a); doSmthWith2(a) }) { aaas =>
@(aaas.map(_.toString).mkString("|"))
}

关于templates - Play 2.0 - 在模板中映射 `map` 或 `for-yield` 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257437/

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