Я пытаюсь создать на Scala для понимания, но сталкиваюсь с некоторыми проблемами, когда пытаюсь использовать более сложный фильтр.
Я знаю основы фильтрации понимания:
for (x <- 1 until 20 if x>3) yield {
x
}
Однако я хочу создать для понимания, в котором есть гораздо более сложный оператор фильтрации. Например, вот иллюстративная версия того, что я пытаюсь сделать:
for (
element <- elementList
val otherElement = databaseCall.getMatching(element.id)
if element.name==otherElement.name
) yield {
element
}
По сути, если вы хотите создать фильтр с более сложными требованиями, это становится неудобно, потому что for complation не позволяет объявлять vals в операторе фильтра, и в противном случае вам пришлось бы уместить все это в одну строку.
Альтернативой было бы вообще не использовать механизм фильтрации, а просто выдать Some (element) или None и вместо этого получить список Option [elementType]. Однако я не хочу, чтобы в этом случае были необязательные типы.
В обязательном порядке я бы просто создал изменяемый список и добавил бы к нему только тогда, когда мое условие выполнено, но я хочу увидеть, как это сделать в большей степени декларативным образом (еще не полностью декларативным, но я '' м еще учусь!).
Любые предложения хороших декларативных способов сделать это были бы очень полезны.
val
теперь не нужен и устарел. - person wingedsubmariner   schedule 08.05.2014