Пользовательское выражение «let» в Scala
я бы хотел иметьlet
построить аналогично тому, как в Haskell в Scala. Я попробовал несколько способов, но ни один не кажется хорошим. Вот'какой-то код:
object CustomLet extends App {
val data = for (i if (cond(res)) doSomethingWithRes(res) else 0}
List[(String, () => Int)](
("withoutLet", withoutLet),
("letWithVal", letWithVal),
("letWithMatch", letWithMatch),
("letWithApp", letWithApp)
).foreach(
item => item match {
case (title, func) => {
println(s"executing $title")
val ret = func()
println(s"$title finished with $ret")
println()
}
}
)
}
Это идеальный вид (только с одной привязкой, больше может быть разделено,
; не уверен насчетin
ключевое слово): Я
// desired look
def letTest(): Int =
let res = heavyCalc() in
if (cond(res)) doSomethingWithRes(res) else 0
я не уверен, если этоВозможно, но у меня нет опыта работы с большинством продвинутых вещей Scala, таких как макросы, поэтому я могуТ действительно сказать.
РЕДАКТИРОВАТЬ1: Чтобы быть ясно, основные вещи, которые яЯ ожидаю от этого:выражение и относительнопростой синтаксис (как описано выше).