我正在尝试在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)
答案 0 :(得分:1)
要在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
帮助器来完成:
@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 *@
}
}
答案 1 :(得分:1)
声明变量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"}
}