я бы подумал, что список кортежей может быть легко сплющенные:Сгладить список кортежей в Scala?
scala> val p = "abcde".toList
p: List[Char] = List(a, b, c, d, e)
scala> val q = "pqrst".toList
q: List[Char] = List(p, q, r, s, t)
scala> val pq = p zip q
pq: List[(Char, Char)] = List((a,p), (b,q), (c,r), (d,s), (e,t))
scala> pq.flatten
Но вместо этого, это происходит:
<console>:15: error: No implicit view available from (Char, Char) => scala.collection.GenTraversableOnce[B].
pq.flatten
^
я могу получить работу с:
scala> (for (x <- pq) yield List(x._1, x._2)).flatten
res1: List[Char] = List(a, p, b, q, c, r, d, s, e, t)
Но я не понимаю сообщение об ошибке. И мое альтернативное решение кажется запутанным и неэффективным.
Что означает это сообщение об ошибке и почему я не могу просто сгладить список кортежей?
Пожалуйста, не используйте неявные преобразования, когда оба источника и тип цели являются общими. Смешайте это, например. auto-tupling, и вы получаете всевозможные дурацкие вещи. Получил метод, который принимает список строк? Внезапно 'foo (" a "," b ")' работает, но 'foo (" a "," b "," c ")' не делает. И дальше и дальше ... –
Точка. Имплициты по своей природе слишком «призрачны» и, вероятно, их следует избегать в случайных ситуациях, подобных этому. – jwvh