如何使用正确的语法在 if 语句中设置 for 循环 Play framework Scala Template
how to setup a for loop inside if statement with correct syntax Play framework Scala Template
我正在尝试在 Scala 模板中设置一个变量。遍历用户拥有的角色,如果发现用户是客户,则对输入做一些事情。如果没有,那就做点别的。
但 scala 并没有那么简单,它不会在以下代码上编译。
@var = @{ if(user != null){
@for(role <- user.roles.filter(_.getName()=="customer")) {
var=@customer(input)
}
}
}
@if( var == null){
var=@others(input)
}
它给了我两个错误
t.scala.html:275:: identifier expected but 'for' found.
[error] @for(role <- user.roles.filter(_.getName()=="customer"))
t.scala.html:278: expected start of definition
另外,在 Scala 中有没有更好的方法来做到这一点?谢谢
我的参考:Scala template set variable
更新:
我的目标是尝试做类似下面的事情,但是在 scala 模板中:
result=null
for role in User.roles:
if(role == "customer"):
result=customer(xyz)
break
if(result==null):
result = others(xyz)
要在 Scala 模板的 if 语句中设置 for 循环,您不需要分配变量。您可以简单地在要显示内容的模板中使用 if
块。例如
@if(user != null) {
@for(role <- user.roles.filter(_.getName()=="customer")) {
@customer(input)
@* Do other stuff related to 'role' and 'input' here *@
}
} else {
@* Do something else *@
}
如需进一步参考,我鼓励您查看 documentation for Play templates。如果你真的想定义一个变量,你可以使用 defining
helper:
@defining(user.getFirstName() + " " + user.getLastName()) { fullName =>
<div>Hello @fullName</div>
}
除了定义变量之外,您还可以定义一个 可重用块,这可能对您的情况有用。例如,
@customer_loop(input: String) = {
@if(user != null) {
@for(role <- user.roles.filter(_.getName()=="customer")) {
@customer(input)
@* Do other stuff related to 'role' and 'input' here *@
}
} else {
@* Do something else *@
}
}
声明一个变量do
@import scala.Any; var result:Any=null //where Any is the datatype accoding to your requirement
重新分配它的值做
@{result = "somevalue"}
所以根据你提供的伪方案解决
@import java.lang.String; var result:String=null
@import scala.util.control._;val loop = new Breaks;
@loop.breakable {
@for(role <- roleList) {
@if(role.equals("customer")) {
@{
result = "somevalue"
}
@{loop.break};
}
}
}
@if(result==null){
@{result="notfound"}
}
同时勾选 Similar1,Similar2
我正在尝试在 Scala 模板中设置一个变量。遍历用户拥有的角色,如果发现用户是客户,则对输入做一些事情。如果没有,那就做点别的。
但 scala 并没有那么简单,它不会在以下代码上编译。
@var = @{ if(user != null){
@for(role <- user.roles.filter(_.getName()=="customer")) {
var=@customer(input)
}
}
}
@if( var == null){
var=@others(input)
}
它给了我两个错误
t.scala.html:275:: identifier expected but 'for' found.
[error] @for(role <- user.roles.filter(_.getName()=="customer"))
t.scala.html:278: expected start of definition
另外,在 Scala 中有没有更好的方法来做到这一点?谢谢
我的参考:Scala template set variable
更新: 我的目标是尝试做类似下面的事情,但是在 scala 模板中:
result=null
for role in User.roles:
if(role == "customer"):
result=customer(xyz)
break
if(result==null):
result = others(xyz)
要在 Scala 模板的 if 语句中设置 for 循环,您不需要分配变量。您可以简单地在要显示内容的模板中使用 if
块。例如
@if(user != null) {
@for(role <- user.roles.filter(_.getName()=="customer")) {
@customer(input)
@* Do other stuff related to 'role' and 'input' here *@
}
} else {
@* Do something else *@
}
如需进一步参考,我鼓励您查看 documentation for Play templates。如果你真的想定义一个变量,你可以使用 defining
helper:
@defining(user.getFirstName() + " " + user.getLastName()) { fullName =>
<div>Hello @fullName</div>
}
除了定义变量之外,您还可以定义一个 可重用块,这可能对您的情况有用。例如,
@customer_loop(input: String) = {
@if(user != null) {
@for(role <- user.roles.filter(_.getName()=="customer")) {
@customer(input)
@* Do other stuff related to 'role' and 'input' here *@
}
} else {
@* Do something else *@
}
}
声明一个变量do
@import scala.Any; var result:Any=null //where Any is the datatype accoding to your requirement
重新分配它的值做
@{result = "somevalue"}
所以根据你提供的伪方案解决
@import java.lang.String; var result:String=null
@import scala.util.control._;val loop = new Breaks;
@loop.breakable {
@for(role <- roleList) {
@if(role.equals("customer")) {
@{
result = "somevalue"
}
@{loop.break};
}
}
}
@if(result==null){
@{result="notfound"}
}
同时勾选 Similar1,Similar2