Итерация по кортежу произвольной длины - PullRequest
10 голосов
/ 25 мая 2011

Я только начал со Scala и столкнулся с проблемой:

В Scala есть типы Tuple1, Tuple2,…, Tuple22.Scalaquery возвращает кортежи при переборе запросов.

Теперь у меня есть заданный класс (ZK's ListitemRenderer), который принимает Object s и заполняет списки графического интерфейса строками, каждый из которых состоит из нескольких ячеек.Но ListitemRenderer не является общим.Поэтому моя проблема в том, что у меня есть Object «данные», которые на самом деле являются кортежами произвольной длины, которые я должен перебрать, чтобы создать ячейки (просто с помощью data._1.toString,…).

Поскольку нет Я не знал супертипа к Tuple1-22, я не могу не мог просто сделать data.asInstanceOf[Tuple].productIterator foreach {…}

Что я могу сделать?


Ниже "Ответ" сказал мне, что действительно есть черта ко всем кортежам - Product - обеспечивая желаемую функцию foreach.

1 Ответ

17 голосов
/ 25 мая 2011

Все TupleX классы наследуются от Product, что определяет def productIterator : Iterator[Any]. Вы можете вызывать его для перебора всех элементов любого кортежа.

Например:

def toStringSeq(tuple: Product) = tuple.productIterator.map(_.toString).toIndexedSeq
...