Scala 将单个值绑定到

Scala 将单个值绑定到,scala,haskell,for-comprehension,Scala,Haskell,For Comprehension,本教程提供了以下示例: 我在这里感兴趣的是,在理解范围内绑定的值bmi,既可以在保护中使用,也可以在结果表达式中使用。我知道如何在Scala中执行类似操作的唯一方法是编写: def calcBmis(xs : Seq[(Double,Double)]) = for((w,h) <- xs ; bmi <- Some(w / (h*h)) if bmi >= 25.0) yield bmi def calcBmis(xs:Seq[(双精度,双精度)])= 对于((w,h)是

本教程提供了以下示例:

我在这里感兴趣的是,在理解范围内绑定的值
bmi
,既可以在保护中使用,也可以在结果表达式中使用。我知道如何在Scala中执行类似操作的唯一方法是编写:

def calcBmis(xs : Seq[(Double,Double)]) =
  for((w,h) <- xs ; bmi <- Some(w / (h*h)) if bmi >= 25.0) yield bmi
def calcBmis(xs:Seq[(双精度,双精度)])=

对于((w,h)是的,有这样的语法

def calcBmis(xs : Seq[(Double,Double)]) =
  for((w,h) <- xs ; bmi = w / (h*h); if bmi >= 25.0) yield bmi

我刚刚复制了om nom nom的答案,以展示如何使用大括号而不使用分号进行布局;这样更清晰一些

def calcBmis(xs : Seq[(Double,Double)]) = for { (w,h) <- xs 
                                                bmi = w / (h*h)
                                                if bmi >= 25.0 } yield bmi

好吧,我错过了半栏:)我的辩护是,当我编写Scala代码时,键盘上几乎没有使用过这个键。
def calcBmis(xs : Seq[(Double,Double)]) =
  for((w,h) <- xs ; bmi = w / (h*h); if bmi >= 25.0) yield bmi
calcBmis.map(wh => wh._1/(wh._2*wh._2)).filter(_>=25.0)
def calcBmis(xs : Seq[(Double,Double)]) = for { (w,h) <- xs 
                                                bmi = w / (h*h)
                                                if bmi >= 25.0 } yield bmi
xs map {case (w, h) => w / (h * h)} filter {_ >= 25.0}