代码之家  ›  专栏  ›  技术社区  ›  Milo Lu

如何访问类参数?

  •  0
  • Milo Lu  · 技术社区  · 7 年前

    Scala编程 ,第304页

    class Queue[T] private (leading: List[T], trailing: List[T]){
      private def mirror =
        if(leading.isEmpty) new Queue(trailing.reverse, Nil)
        else this
      def head = mirror.leading.head
      def tail = {
        val q = mirror
        new Queue(q.leading.tail, q.trailing)
      }
      def append[T](x: T)={
        new Queue(leading, x::trailing)
      }
    }
    

    我得到以下错误

    Error:value leading is not a member of Queue[T]
    def head = mirror.leading.head
    

    trailing . mirror Queue 正当为什么它不能访问它的类参数?

    1 回复  |  直到 7 年前
        1
  •  2
  •   yǝsʞǝla    7 年前

    的确 leading trailing Queue 类,但默认情况下它们是私有的。要使其公开,请添加 val

    之前:

    scala> class Queue[T] private (leading: List[T], trailing: List[T]){
         |   private def mirror =
         |     if(leading.isEmpty) new Queue(trailing.reverse, Nil)
         |     else this
         |   def head = mirror.leading.head
         |   def tail = {
         |     val q = mirror
         |     new Queue(q.leading.tail, q.trailing)
         |   }
         |   def append[T](x: T)={
         |     new Queue(leading, x::trailing)
         |   }
         | }
    <console>:15: error: value leading is not a member of Queue[T]
             def head = mirror.leading.head
                               ^
    <console>:18: error: value leading is not a member of Queue[T]
               new Queue(q.leading.tail, q.trailing)
                           ^
    <console>:18: error: value trailing is not a member of Queue[T]
               new Queue(q.leading.tail, q.trailing)
                                           ^
    

    之后:

    scala> class Queue[T] private (val leading: List[T], val trailing: List[T]){
         |   private def mirror =
         |     if(leading.isEmpty) new Queue(trailing.reverse, Nil)
         |     else this
         |   def head = mirror.leading.head
         |   def tail = {
         |     val q = mirror
         |     new Queue(q.leading.tail, q.trailing)
         |   }
         |   def append[T](x: T)={
         |     new Queue(leading, x::trailing)
         |   }
         | }
    defined class Queue
    

    您可以详细阅读构造函数和getter here

    瓦尔 var 这个班。

    推荐文章