Как я могу преобразовать Java, Повторяемый в Повторяемого Scala?

(Я собирался оставить это как комментарий к ответу @ jldupont, но мне не хватает репутации.)

Я видел ответы, подобные ответу @ jldupont, и в других местах. FWIW, я думаю, важно отметить, что это:

except Exception as e:
    print(e)

напечатает вывод ошибки в sys.stdout по умолчанию. Более подходящим подходом к обработке ошибок в целом было бы:

except Exception as e:
    print(e, file=sys.stderr)

(Обратите внимание, что для этого нужно import sys.) Таким образом, ошибка выводится в STDERR вместо STDOUT, что позволяет правильно анализировать / перенаправлять вывод и т. Д. Я понимаю, что вопрос был строго о «печати ошибки», но, кажется, важно указать здесь лучшую практику, а не пропустить эту деталь, которая может привести к нестандартному коду для тех, кто в конечном итоге не научится лучше.

Я не использовал модуль traceback, как в ответе Cat Plus Plus, и, возможно, это лучший способ, но я подумал, что я добавлю это туда.

54
задан om-nom-nom 22 June 2013 в 01:10
поделиться

1 ответ

Да, используйте неявные преобразования:

import java.lang.{Iterable => JavaItb}
import java.util.{Iterator => JavaItr}

implicit def jitb2sitb[T](jit: JavaItb[T]): Iterable[T] = new SJIterable(jit);
implicit def jitr2sitr[A](jit: JavaItr[A]): Iterator[A] = new SJIterator(jit)

Что затем можно легко реализовать:

class SJIterable[T](private val jitb: JavaItr[T]) extends Iterable[T] {
  def elements(): Iterator[T] = jitb.iterator()
}

class SJIterator[T](private val jit: JavaItr[T]) extends Iterator[T] {
  def hasNext: Boolean = jit hasNext

  def next: T = jit next
}
12
ответ дан 7 November 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: