scala的类和伴生对象的一些疑惑

查看:78
本文介绍了scala的类和伴生对象的一些疑惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

  trait Stream[+A] {
  def toList: List[A] = this match{
      case Empty => Nil
      case Cons(h,t) => h() :: t().toList
  }
  def headOption:Option[A] = this match{
      case Empty => None
      case Cons(h,t) => Some(h())
  } 
  }
  case object Empty extends Stream[Nothing]
  case class Cons[+A](h: ()=>A, t : ()=>Stream[A]) extends Stream[A]
 
  object Stream{
      def cons[A](h: =>A, t : =>Stream[A]): Stream[A]= {
          lazy val head = h
          lazy val tail = t
          Cons(()=>head,()=>tail)
  }
      def empty[A]:Stream[A] = Empty
      def apply[A](as: A*):Stream[A]=if (as.isEmpty) empty else cons(as.head, apply(as.tail: _*))
}

如图,照抄了一个Steam的实现,但是我的疑惑是toList方法,他不应该放在伴生对象里吗?一开始toList我用的虚函数,但我看headOption能用模式匹配,我就试了试,也可以,所以toList怎么实现多态的?我自己有点晕。

解决方案

伴生对象有些类似于java里面静态工厂类

这篇关于scala的类和伴生对象的一些疑惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆