[Scala] Убогий паттерн матчинг или я чего-то упускаю
От: avpavlov  
Дата: 10.02.09 14:15
Оценка:
Хорошо и наглядно работает на константах

case class Item(x:int, y:int)

val item = Item(...)
item match {
 case Item(0,0) => "zeroes"
 case ...
}


но если мне требуется сопоставить объект с образцом, характеристики которого заранее неизвестны, то получается вот такая фигня

case class Item(x:int, y:int)

val expectedX = 0;
val expectedY = 0;
val item = Item(...)
item match {
 case Item(a,b) if (a==expectedX && b==expectedY) => "zeroes"
 case ...
}


Т.е. те же if-ы, вид сбоку. Понятно, почему нельзя написать case Item(expectedX, expectedY), потому что в данном случае получаем синонимы для значений объекта, но почему нельзя написать что-то вроде case Item(@expectedX, @expectedY) — т.е. каким либо образов указать компилятору, что я хочу использовать здесь значения переменных.

Или такое возможно, а я просто плохо читал? Если нельзя, то паттерн матчинг получается довольно убогий, потому что не позволяет избавиться от if-ов, которые неудобно читать.

ПС

Плагин для НетБинс довольно неудобный. Кто-нибудь имел опыт с Eclipse и IDEA — лучше там плагины в сравнении с НетБинс, или тоже так себе?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.