zoukankan      html  css  js  c++  java
  • 9.Scala- 包和引入

    第9章 包和引入

    9.1 包/作用域

    在 Java 和 Scala 中管理项目可以使用包结构,C 和 C# 使用命名空间。

    对于 package,有如下几种形式:

    1)形式体现:

    package com.nick.impatient.people
    
    class Person {
      
      val name = "Nick"
      def play(message: String): Unit ={
        
      }
    
    }

    等同于:

    package com.nick.impatient
    package.people
    
    class Person {
      
      val name = "Nick"
      def play(message: String): Unit ={
        
      }
    
    }

    等同于:

    package com.nick.impatient{ // com 和 com.nick 的成员在这里不可见
      package people{
    
        class Person {
    
          val name = "Nick"
          def play(message: String): Unit ={
    
          }
        }
      }
    }

    尖叫提示:位于文件顶部不带花括号的包声明在整个文件范围内有效。

    /*
      1、包也可以向内部类那样嵌套,作用域原则:可以直接向上访问。即,子 package 中直接访问父 package 中的内容。(即:作用域)
      2、包对象可以持有函数和变量(可以直接在包里面定义函数和变量)
      3、引入语句可以引入包、类和对象(import scala)(import scala.collection.mutable.Map.add)
      4、源文件的目录和包之间并没有强制的关联关系(包不会体现成文件夹形式,Java会强制关联)
      5、可以在同一个 .scala 文件中,声明多个并列的 package
      6、包名可以相对也可以绝对,比如,访问 ArrayBuffer 的绝对路径是:
      _root_.scala.collection.mutable.ArrayBuffer
      相对路径可以写成:mutable.ArrayBuffer
     */

    9.2 包对象

    包可以包含类、对象和特质 trait,但是不能包含函数和变量的定义,这个是Java 虚拟机的限制。
    把工具函数或者常量添加到包而不是某个 Utils 对象,这是更加合理的做法。包对象的出现正是
    为了解决这个局限。每个包都可以由一个包对象。你需要在父包中定义它,且名称与子包一样。
    package com.nick.impatient
    
    package object people1{
      val defaultName = "Nick"
    }
    
    package people1{
      
      class people1 {
        var name = defaultName //从包对象拿到的常量
      }
    }

    9.3 包可见性

    在 Java 中、没有被声明为 public、private 或 protected 的类成员在包含该类的包可见。在Scala 中,

    你可以通过修饰符达到同样的效果。以下方法在它自己的包中可见:

    package com.nick.impatient.people
    
    class Person1 {
    
      private[people] def description = "名字:" + name
      
    }

    当然,也可以将可见度延展到上层包:
     

    private[impatient] def description = "名字:" + name

    9.4 引入

    通过 import 进行包的引入,_ 类似于 java 中的 *

    9.5 重命名和隐藏方法

    1)通过包选取器选择单个类:
    import java.awt.{Color, Font}
    Color.RED
    Font.BOLD
     
    2)重命名:
    如果你想要引入包中的几个成员,可以像这样使用选取器(selector),而且选取得同时,可以
    重命名:
    //重命名
    import java.util.{HashMap => JavaHashMap, List}
    import scala.collection.mutable._
    new JavaHashMap[String, Int]
    new HashMap[String, Int]
     这样一来,JavaHashMap 就是 java.util.HashMap,
    而 HashMap 则对应 scala.collection.mutable.HashMap。
     
    2)隐藏:
    选取其 HashMap =>_ 将隐藏某个成员而不是重命名它。这仅在你需要引入其他成员时用:
    import java.util.{HashMap => _, _} 
    import scala.collection.mutable._

     现在,HashMap 很明确得指向了 scala.collection.mutable.HashMap,因为 java.util.HashMap 被隐藏起来了。

  • 相关阅读:
    bzoj2064分裂(dp)
    关于逆元的学习笔记(尚未完成)
    线性基学习笔记
    bzoj2460元素(线性基,贪心)
    CF280C Game on tree(期望dp)
    XJOI contest800
    关闭极域电子教室学生端的各种方法
    大坑!有网,电脑qq登不上去!!
    4.25 ZJOI2017 10AM
    bzoj1621
  • 原文地址:https://www.cnblogs.com/LXL616/p/11124133.html
Copyright © 2011-2022 走看看