美文网首页
【2019-05-24】包和引用

【2019-05-24】包和引用

作者: BigBigFlower | 来源:发表于2019-05-24 09:26 被阅读0次

scala代码采用Java代码完整的包机制。

//同一个文件嵌入不同的包
package bobsrockets {
  package navigation {

    // In package bobsrockets.navigation
    class Navigator

    package tests {

      // In package bobsrockets.navigation.tests
      class NavigatorSuite
    }
  }
}

引用,scala里,包和其他成员可以用import引用,之后的引用可以用File这样的简单名访问。

package bobsdelights

abstract class Fruit(
  val name: String,
  val color: String
)

object Fruits {
  object Apple extends Fruit("apple", "red")
  object Orange extends Fruit("orange", "orange")
  object Pear extends Fruit("pear", "yellowish")
  val menu = List(Apple, Orange, Pear)
}

object Ex5 {
  // easy access to Fruit
  import bobsdelights.Fruit
  
  // easy access to all members of bobsdelights
  import bobsdelights._
  
  // easy access to all members of Fruits
  import bobsdelights.Fruits._
  def showFruit(fruit: Fruit) {
//引用规范的(不是单例)对象的成员
    import fruit._
    println(name +"s are "+ color)
  }
  def main(args: Array[String]) {
    println("Apple [" + Apple + "]")
    showFruit(Fruits.Apple)
  }
}


//引用包名
//访问java.util.regex包的Pattern单例对象
object Ex6 {
  import java.util.regex
  class AStarB {
    // Accesses java.util.regex.Pattern
    val pat = regex.Pattern.compile("a*b")
  }
  def main(args: Array[String]) {
    println("(new AStarB).pat [" + (new AStarB).pat + "]")
  }
}

scala灵活引用
(1)可以出现在任何地方
(2)可以指的是(单例或正统的)对象及包
(3)可以重命名或隐藏一些被引用的成员

隐式引用
scala为每个程序隐式地添加了一些引用

import java.lang._ // everything in the java.lang package
import scala._     // everything in the scala package
import Predef._    // everything in the Predef object

访问修饰符
包、类或对象的成员可以访问修饰符private和protected做标记。这些修饰符把对成员的访问限制在代码确定的区域中。

//私有成员
class Outer {
  class Inner {
    private def f() { println("f") }
    class InnerMost {
      f() // OK
    }
  }
  (new Inner).f() // error: f is not accessible
}
//保护成员
package p {
  class Super {
    protected def f() { println("f") }
  }
  class Sub extends Super {
    f()
  }
  class Other {
    (new Super).f()  // error: f is not accessible
  }
}
//保护的作用域
//访问修饰符可以通过限定词强调,格式为private[x]或protected[x]的修饰符表示“直到”x的私有或保护,这里x指代某个所属的包、类或单例对象。
package bobsrockets {
 package navigation {
   private[bobsrockets] class Navigator { 
     protected[navigation] def useStarChart() {}
     class LegOfJourney {
       private[Navigator] val distance = 100
     }
     private[this] var speed = 200
   }
 }
 package launch {
   import navigation._
   object Vehicle { 
     private[launch] val guide = new Navigator
   }
 }
}

可见性和伴生对象
scala里没有静态成员,作为替代,可以拥有包含成员的单例的伴生对象。

//Rocket对象是Rocket类的伴生
//访问伴生类和对象的私有成员
class Rocket {
  import Rocket.fuel
  private def canGoHomeAgain = fuel > 20
}

object Rocket {
  private def fuel = 10
  def chooseStrategy(rocket: Rocket) {
    if (rocket.canGoHomeAgain)
      goHome()
    else
      pickAStar()
  }
  def goHome() {}
  def pickAStar() {}
}

相关文章

  • 【2019-05-24】包和引用

    scala代码采用Java代码完整的包机制。 引用,scala里,包和其他成员可以用import引用,之后的引用可...

  • 闭包和引用

    闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。 因为 函数 ...

  • Swift weak和unowned

    弱引用和无主引用 在闭包和捕获的实例总是互相引用并且总是同时释放时,将闭包内的捕获定义为无主引用。 相反,在被捕获...

  • 2019-05-24

    2019-05-24 ganquan 已关注 字数 13113 · 阅读 21 2019-05-24 08:17 ...

  • Android 四种引用比较与源码分析

    目录介绍 0.关于四种引用0.1 引用说明0.2 关于Java下ref包和Android下ref包 1.强引用1....

  • 闭包中的循环引用及解决方法

    闭包中的循环引用 闭包中的循环引用原理和OC中的block类似。即对象A强引用了对象B,然后B也强引用了A。示例如...

  • 闭包

    闭包的基本语法 闭包的内容捕获 闭包和函数的引用类型

  • 「JS」闭包

    闭包闭包的应用保存变量现场封装 闭包 闭包有函数和与其相关的引用环境的组合而成 闭包允许函数访问其引用环境中的变量...

  • Android Studio添加依赖那些事

    自动下载仓库的包 引用libs目录下的所有jar包 引用jar包 引用arr文件 引用模块库 仅仅编译时使用, 但...

  • 闭包

    闭包概念 在计算机科学中,闭包, 又称词法闭包或函数闭包, 是引用了自由变量的函数。 这个被引用的自由变量将和这个...

网友评论

      本文标题:【2019-05-24】包和引用

      本文链接:https://www.haomeiwen.com/subject/pkmbzqtx.html