Метод Scala Stream isEmpty VS сопоставление с образцом head #:: tail

При отладке отображается "$Stream$Empty". Но это не попало в случай .isEmpty. Я изменил шаблон на "head # :: tail", он отлично работает в некоторых тестовых случаях. Кто-нибудь может объяснить, что происходило за кулисами?


person Mingtao Zhang    schedule 09.11.2013    source источник
comment
Вам нужно показать фактический код.   -  person ghik    schedule 10.11.2013
comment
Умозрение: поток не пуст в том смысле, что он имеет элементы, но ни один из этих элементов еще не реализован.   -  person Stefan Kunze    schedule 10.11.2013
comment
:( Коды связаны с заданием из курса функционального программирования на Coursera.   -  person Mingtao Zhang    schedule 11.11.2013
comment
Возможный дубликат Разница между Iterator и Stream в Scala?   -  person Paul Sweatte    schedule 17.06.2016


Ответы (1)


Это полезно? isEmpty отлично работает.

val strm = true #:: false #:: Stream[Boolean]()
def matchStream[T](stream:Stream[T]):List[String] = {
  stream match {
    case head #:: tail => head.toString :: matchStream(tail)
    case stm if stm.isEmpty => List("end of stream")
  }
}
matchStream(strm)

Я запустил это на листе и получил

res0: List[String] = List(true, false, end of stream)
person Ion Freeman    schedule 21.03.2017
comment
Это трехлетний вопрос о выводе отладчика, на который ваш ответ не распространяется. Я сомневаюсь, что ОП (который не посещал SO более года) или кто-либо еще найдет это полезным. - person jwvh; 21.03.2017