`
itang
  • 浏览: 71275 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Scala的import机制总结

阅读更多

Scala的import机制总结

import 主要用于导入各种名字空间(package)或其包含的成员,使它们在声明的作用域里可见。

1 导入package

  访问package的成员需要用导入的package名作为前缀,主要用于当package嵌套较多时,可以起到简化及隔离名字空间的作用。

  当然任何时候使用完整package路径(full package path)都是可以的。如:

 

  import java.util
  new util.ArrayList[String]() // 需要有util作为前缀,省略掉util的父package “java”
  new java.util.ArrayList[String] // 通过完整package路径访问

  import java.sql
  new sql.Date(new util.Date().getTime) // 使用package名隔离Date类的名字冲突

2 导入package下所有成员

  相比Java中使用‘*’,Scala使用'_'表示导入package下所有成员. 

  如:

 

scala> val map = new HashMap[String,Int]
<console>:7: error: not found: type HashMap
       val map = new HashMap[String,Int]
                     ^
scala> import scala.collection.immutable.HashMap
import scala.collection.immutable.HashMap

scala> var map = new HashMap[String,Int]
map: scala.collection.immutable.HashMap[String,Int] = Map()

scala> map += "itang" -> 1

scala> map
res1: scala.collection.immutable.HashMap[String,Int] = Map(itang -> 1)

scala> import java.util._
scala> new ArrayList[String]()
 

3 导入package下特定成员

  指定package路径及要导入的类等的名称,如:

 

import java.util.ArrayList
new ArrayList[Int]

4 导入package下特定成员,并重命名

  在要导入package后使用"{}",指定要导入的成员,并使用"=>"重命名;如果在一个package下要导入多个成员,则使用逗号分隔.如:

 

scala> import java.util.{ArrayList => JList, HashMap => JMap}
scala> new JList[Int]
res: java.util.ArrayList[Int] = []

scala> type JStringList = JList[String]
defined type alias JStringList

scala> new JStringList
res: java.util.ArrayList[String] = []

scala> new JMap[String, String]
res: java.util.HashMap[String,String] = {}

scala> import scala.Option.{empty => jempty}
scala> jempty
res: Option[Nothing] = None

5 导入package object的成员

  scala中package除了充当命名空间之外,还可以通过package object可定义一些成员,形如:

 

package test

package object utils {
  type JStringList = java.util.ArrayList[String]
  val Msg = "Hello, World"
  implicit def iw(target: Int) = new {
	  def times(proc: => Any) {
		  var i = 0
		  while (i < target) {
			  proc
			  i += 1
		  }
	  }
  }
}

 

import test.utils._
object tt extends App {
  println(Msg)
  new JStringList
  10.times(println("hello"))
}

6 导入object的成员

  Scala中是没有Java中类中静态成员的概念,反之,Scala使用object class(对象类型)单例模式

  Scala能导入object class的成员,也能导入运行时对象实例的成员

 

scala> import scala.Option._
scala> empty
res: Option[Nothing] = None 

case class User(name: String, age: Int)
val a = new User("itang", 18)
println("%s's age is %d" format (a.name, a.age))

import a._
println("%s's age is %d", name, age) //output: itang's age is 18

 

7 import 可以位于表达式的能放的任意位置,而且导入的成员有其“可见”的作用域

  如一下代码所示:

 

import scala.actors.Actor._

class TestPackagePosScope extends App {
  actor {
	  println("Hello")
  }
  //new HashSet[String] ///not found type: HashSet
  import collection.immutable.HashSet
  new HashSet[String]

  def test1() {
	  import java.text.{ SimpleDateFormat => Sdf }
	  import java.util.Date
	  new Sdf("yyyy-MM-dd").format(new Date)
  }

  //new Sdf("yyyy-MM-dd").format(new Date) //not found type: Sdf
  {
	  import java.util._
	  val jlist = new ArrayList[String]
  }
  //val badJlist = new ArrayList[String] // not found type: ArrayList
}
  

  import 使用上像表达式,但它不是表达式也不是函数,它没有返回值,存在于编译时,如

  scala> val some = import java.util._

  <console>:1: error: illegal start of simple expression

         val some = import java.util._

8 scala默认已导入的名字空间及成员

 scala包下成员默认可见

  相当与每个编译单元里默认import scala._

 

scala> Console.println("hello") // scala.Console
scala> Seq(1,2)
scala> scala.Seq(1,2)

 注意到scala也是一个package object,里面定义了很多不同package的下类型别名,如此可以将众多的类型组织到scala名字空间。

 

  java.lang包下成员默认可见

  相当与每个编译单元里默认import java.lang._ 

 

scala> Runtime.getRuntime.availableProcessors // java.lang.Runtime
scala> System.getProperty("user.home")
 

  scala.Predef 这个object下成员默认可见(主要定义全局函数,类型别名,隐式转换等等)

  相当与每个编译单元里默认import scala.Predef._

 

scala> println("hello")
scala> scala.Predef.println("hell")
scala> "msg" -> "Hello"
scala> any2ArrowAssoc("msg").->("Hello") //scala.Predef.any2ArrowAssoc
 

 

 

 

 

1
9
分享到:
评论

相关推荐

    scala入门(仅供参考)

    - **面向对象编程**:Scala支持传统的类和对象,同时也引入了特质(trait),一种更灵活的继承机制。 - **函数式编程**:Scala提供了高阶函数、不可变数据结构和模式匹配等特性,支持函数式编程风格。 - **复合性...

    Scala入门教程_中文版整理

    Scala不仅提供了简洁优雅的语法,而且在功能上也进行了许多创新和改进,例如单例对象的概念、更灵活的导入机制等。这些特性使得Scala成为一种既适合大规模企业级应用开发,又适用于小规模脚本编写等多种场景的理想...

    Scala编程详解 第21讲-Scala编程详解:Actor入门 共8页.pptx

    Scala中的Actor模型是其并发编程的核心机制,它是基于消息传递的并发模型,旨在解决多线程编程中常见的竞态条件、死锁等问题。Actor系统允许程序在安全的环境中并行运行,通过异步消息传递来交换信息,避免了共享...

    Scala编写及常见异常

    总结来说,Scala的异常处理机制提供了多种处理异常的方式,包括传统的`try-catch-finally`、`Either`和`Try`。理解并熟练运用这些机制,能帮助开发者写出更加健壮、容错性强的Scala代码。在编写Scala应用时,要充分...

    scala 中文教程下载

    - 引用(Import)机制的介绍。 - **第14章:断言和单元测试** - 断言的使用。 - 单元测试的方法和技术。 - **第15章:样例类和模式匹配** - 样例类(Case Class)的概念及其应用场景。 - 模式匹配(Pattern ...

    Scala数据库百度云04.txt

    - **Quill**:Quill是另一个现代的Scala ORM框架,它允许开发者以类型安全的方式编写SQL查询,并且提供了很好的编译时错误检查机制。 #### 数据库性能优化 在Scala中进行数据库开发时,还需要考虑性能优化的问题。...

    scala编程的实战

    import scala.concurrent.duration._ import com.typesafe.config.ConfigFactory import scala.collection.mutable /** * Master为整个集群中的主节点 * Master继承了Actor */ class Master extends Actor { //...

    CrossCuttingConcern_Scala:在 Scala 中使用面向切面编程 (AOP) 实现横切关注

    Aspects4s 基于 Scala 的反射机制,可以在运行时动态地织入切面。 在 Scala 中使用 Aspects4s 实现AOP通常包括以下步骤: 1. **定义切点(Joinpoint)**:确定需要插入切面的代码位置,这可能是一个方法调用、类...

    scarango:用Scala编写的ArangoDB客户端

    import scala.concurrent.ExecutionContext.Implicits.global val client = Scarango.client("http://localhost:8529", "myUser", "myPassword") client.connect() val db = client.database("test_db") db.create...

    spark读取hbase数据,并使用spark sql保存到mysql

    这个过程的关键在于理解 Spark、HBase 和 MySQL 之间的交互机制,以及正确配置它们的连接参数。通过使用 DataFrame API 和 Spark SQL,可以方便地在不同的数据源之间进行数据迁移和处理。在实际应用中,根据具体需求...

    lolhttp:Scala的HTTP服务器和客户端库

    ### 总结 `lolhttp`是Scala开发者构建HTTP服务和客户端应用的理想选择。它提供的强大功能、灵活性和高效性能,使得开发者能够在Scala环境中轻松处理HTTP通信,同时享受到Scala语言的诸多优点。通过深入理解并充分...

    ciris:Scala的功能配置

    总结来说,Ciris是Scala开发中的一个强大工具,它的类型安全特性和丰富的功能使配置管理变得更加简单和可靠。通过熟练掌握Ciris,开发者可以更高效地处理项目的配置问题,提高代码质量和可维护性。

    SparkStreaming和kafka的整合.pdf

    Spark Streaming将数据流分割成一系列小批量的数据块进行处理,这种机制使得Spark Streaming既能够处理实时数据流,又能利用Spark的核心API进行复杂的数据处理。 #### 2. Kafka简介 Apache Kafka是一种分布式的发布...

    spark开发第三部分

    总结起来,Spark开发第三部分主要涵盖了使用Scala开发Spark应用的核心概念,包括DataFrame和RDD的操作,数据源的读写,Spark的并行计算模型,以及如何利用Scala的特性进行高效编程。通过深入学习和实践这些知识点,...

    kafka连接flink流计算完整版

    import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.connectors.kafka._ object KafkaFlinkConsumer { def main(args: Array[String]): Unit = { val env = ...

    Flink技术增强

    import org.apache.flink.api.scala._ object WordCount { def main(args: Array[String]) { // 初始化执行环境 val env = ExecutionEnvironment.getExecutionEnvironment // 从字符串中加载数据 val text = ...

    基于AKKA的后台应用开发手册

    #### 总结和展望 通过本文档的学习,您应该能够掌握AKKA的基本使用方法,并能够在PAAS平台上开发出高效可靠的Actor模式应用程序。未来,随着技术的发展,AKKA将持续更新和完善,为开发者提供更多便利和强大的工具。...

    zio-sqs:由ZIO支持的AWS SQS客户端

    ZIO的核心概念是环境(Environment),它封装了执行上下文中的所有依赖,以及一种组合和顺序执行任务的机制。 **SQS简介** Amazon Simple Queue Service (SQS) 是AWS提供的一个完全托管的消息队列服务。它允许...

Global site tag (gtag.js) - Google Analytics