【问题标题】:how to extend Stream by implementing tailDefined如何通过实现tailDefined来扩展Stream
【发布时间】:2015-12-06 01:53:19
【问题描述】:

我想扩展scala.Stream。当我尝试时,它告诉我不能,因为我没有所需的方法tailDefined

class S[T](s:Stream[T]) extends Stream[T] {

}

当我尝试这个时,它告诉我tailDefined 受到保护:

class S[T](s:Stream[T]) extends Stream[T] {
  def tailDefined = s.tailDefined
}

如何绕过这个限制并实现Stream 的扩展?

【问题讨论】:

  • 您是否注意到“警告:不推荐从不可变包中的类 Stream 继承”?所以即使你现在设法让它工作,它也不会在未来的 Scala 中工作。
  • 谢谢@SethTisue。那么你将如何(功能上)扩展Stream
  • 这取决于您想要扩展Stream 的动机。如果要添加新操作,请参阅 Alexey 的回答。否则,请考虑使用组合而不是继承。为了提供更好的答案,我们需要更多地了解您的用例。

标签: scala stream scala-collections


【解决方案1】:

如果你想向Stream“添加新方法”,请使用隐式类:

implicit class S[T](s:Stream[T]) {
  def method1 = ...
}

val s: Stream[Int] = ...
s.method1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多