如何使用正确的语法在 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