Scala编译器不执行未返回的值

Scala编译器不执行未返回的值,scala,functional-programming,Scala,Functional Programming,我是斯卡拉的新手。最近我在写一些代码,发现scala有一些不寻常的行为。所以我写了这个代码 for { verification <- verifyReset(hash, timestamp, id) resp = if (verification) { setPassword(id, password) setActive(id) HttpResponse(Accepted, Seq(Location(Empty wit

我是斯卡拉的新手。最近我在写一些代码,发现scala有一些不寻常的行为。所以我写了这个代码

for {
  verification <- verifyReset(hash, timestamp, id)
  resp = if (verification) {
          setPassword(id, password)
          setActive(id)
          HttpResponse(Accepted, Seq(Location(Empty withPath Path / id)))
  } else HttpResponse(Unauthorized)
} yield resp
我得到了
r
as6(正常行为),但它也给了我控制台上的输出

1语句
第二条声明

我不明白这一点,因为在计算
2*3
时,我不需要执行
println
,那么为什么执行
println

你的假设在这里是错误的

它将在返回最后一条语句之前执行所有操作。默认情况下,返回最后一条语句。一定有其他错误

setPassword(id,password)
设置活动(id)

你的假设在这里是错误的

它将在返回最后一条语句之前执行所有操作。默认情况下,返回最后一条语句。一定有其他错误

setPassword(id,password)

setActive(id)

如果您能向我们展示您的
setPassword
setActive
功能,可能会更容易帮助您。如果您的假设是正确的,您将永远无法成功调用
println
,因为它甚至没有可以使用的结果。您的假设不正确。这种行为是否是因为
懒惰评估
进入
进行理解
,而第二种情况并非如此?如果您可以向我们展示您的
设置密码
设置活动
函数,可能会更容易帮助您。如果您的假设正确,您永远无法成功调用
println
,因为它甚至没有可以使用的结果。你的假设是不正确的。这种行为是因为
懒惰评估
进入
进行理解
,而在第二种情况下不是这样吗?我向你保证
setPassword
setActive
@AyushAgarwal没有错误,如果是这样的话。请粘贴主方法对象的代码。调试会更容易我向您保证
setPassword
setActive
@AyushAgarwal在这种情况下不会出错。请粘贴主方法对象的代码。这将更容易调试
r = if(true){
     println("1st statement")
     println("2nd statement")
     2*3
}