В руководстве Learn You a Haskell есть пример использование let
связывателя в понимании списка:
calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2, bmi >= 25.0]
Функция принимает список пар рост / вес и возвращает список соответствующих индексов массы тела, которые превышают некоторый предел, например:
ghci> calcBmis [(70, 1.85), (50, 2.00), (130, 1.62)]
[49.53513183965858]
Что меня интересует, так это то, что значение bmi
, связанное с пониманием, может использоваться как в охраннике, так и в результирующем выражении. Единственный способ сделать что-то подобное в Scala - это написать:
def calcBmis(xs : Seq[(Double,Double)]) =
for((w,h) <- xs ; bmi <- Some(w / (h*h)) if bmi >= 25.0) yield bmi
Мне кажется неправильным заключать здесь мое значение в Some
. Кто-нибудь знает лучший способ?