zoukankan      html  css  js  c++  java
  • scala入门 包和引入

    1. 支持嵌套,下层可以访问上层作用域中的名称
    2. 可串联
    3. 顶部标记
    4. 包对象
    5. 包可见性
    6. 包在任何地方都可以引入,作用域至该语句所在块的末尾
    7. 重命名引入成员(xx => yy)
    8. 隐藏方法(xx =>_)
    9. 自动引入(java.lang._   scala._   Predef._)

    支持嵌套,下层可以访问上层作用域中的名称

    包可以嵌套,一个包可以定义在多个文件当中,也不需要将源文件和包之间对应起来;

    package com.benlai{
         class Fruit{
            def sell : Unit= {
                println("all fruit sell out")
           }
          }      
            
        package life{
            class Apple {
               def currentState : Unit = {
                     val f = new Fruit //不需要引入Fruit的包
                     f.sell
               }  
          }        
        }
    }            

    可串联

    串联式包名,上级包的成员不可见

    package com{
         class Fruit{
            def sell : Unit= {
                println("all fruit sell out")
           }
          }      
    }   
    

      

    package com.benlai{
         //此处不可见com包成员
          class Apple {
              def currentState : Unit = {
                     import com.Fruit
                     val f = new Fruit //不可见com成员,需要引入Fruit的包
                     f.sell
              }  
         }
    
         class Banana {
              .....
         }        
        
    }      
    

      

    顶部标记

    代码位于同一个包内,在文件顶部标记包;

    package com.benlai
    package life
       class Apple {
              def currentState : Unit = {
                   println("this is an apple")
              }  
         }
    
         class Banana {
             def currentState : Unit = {
                    println("this is a banana")
              } 
         }        

    文件的内容在com.benlai.life包中,com.benlai包中的内容对com.benlai.life均可见;但com包中成员对com.benlai.life不可见

    包对象

    类似于Java中将一个Util类定义在一个静态类中一样,包对象就是将一些常用的方法写在一个package object中,需要的时候,引入这个包;

    package com.benlai.life
    
    package object DateUtil {
          val info = "current date ...."
          def display():Unit = {
                println("info is " + info)
           }
    }
    //在 Fruit对象中调用DateUtil的display方法
    class
    Fruit { def currentInfo():Unit = { import com.benlai.life.DateUtil DateUtil.display() } }

    包的可见性

    scala中类内的成员默认是公有访问权限的,如果想要把scala的成员设定为私有类型的需添加 private[package-name];如 private[this] val name:String = "jack"

    package com.benlai
    
        class Person{
           val name:String = "jack" //公有访问权限
           private[this] val age:Int = 21 //类内成员可访问
           private[com] val address:String = "shanghai" //com、com.benlai包下成员可访问
        }
    

     

    包在任何地方都可以引入,作用域至该语句所在块的末尾

    {
        import package com.benlai.Person  //作用域在这个"块"中有效,这个"块"外无效
    }
    

      

    重命名引入成员(xx => yy)和隐藏方法

    //重命名引入成员
    import java.util.{HashMap=>JHashMap}
    
    //引入java.util包下的所有成员除去HashMap外;
    improt java.util.{HashMap=>_,_}

     

    自动引入

    scala会自动引入java.lang._、scala._、Predef._这些包

  • 相关阅读:
    php图片水印添加,压缩,剪切的封装类
    使用观察者模式处理异常信息
    php中的错误级别
    php 递归函数的三种实现方式
    php利用递归函数实现无限级分类
    利用http协议发布博客园博文评论
    结合php ob函数理解缓冲机制
    php 正则表达式捕获组与非捕获组
    php 利用socket发送GET,POST请求
    php mysqli扩展之预处理
  • 原文地址:https://www.cnblogs.com/liuyunAlex/p/5112835.html
Copyright © 2011-2022 走看看