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
分享到:
相关推荐
- **面向对象编程**:Scala支持传统的类和对象,同时也引入了特质(trait),一种更灵活的继承机制。 - **函数式编程**:Scala提供了高阶函数、不可变数据结构和模式匹配等特性,支持函数式编程风格。 - **复合性...
Scala不仅提供了简洁优雅的语法,而且在功能上也进行了许多创新和改进,例如单例对象的概念、更灵活的导入机制等。这些特性使得Scala成为一种既适合大规模企业级应用开发,又适用于小规模脚本编写等多种场景的理想...
Scala中的Actor模型是其并发编程的核心机制,它是基于消息传递的并发模型,旨在解决多线程编程中常见的竞态条件、死锁等问题。Actor系统允许程序在安全的环境中并行运行,通过异步消息传递来交换信息,避免了共享...
总结来说,Scala的异常处理机制提供了多种处理异常的方式,包括传统的`try-catch-finally`、`Either`和`Try`。理解并熟练运用这些机制,能帮助开发者写出更加健壮、容错性强的Scala代码。在编写Scala应用时,要充分...
- 引用(Import)机制的介绍。 - **第14章:断言和单元测试** - 断言的使用。 - 单元测试的方法和技术。 - **第15章:样例类和模式匹配** - 样例类(Case Class)的概念及其应用场景。 - 模式匹配(Pattern ...
- **Quill**:Quill是另一个现代的Scala ORM框架,它允许开发者以类型安全的方式编写SQL查询,并且提供了很好的编译时错误检查机制。 #### 数据库性能优化 在Scala中进行数据库开发时,还需要考虑性能优化的问题。...
import scala.concurrent.duration._ import com.typesafe.config.ConfigFactory import scala.collection.mutable /** * Master为整个集群中的主节点 * Master继承了Actor */ class Master extends Actor { //...
Aspects4s 基于 Scala 的反射机制,可以在运行时动态地织入切面。 在 Scala 中使用 Aspects4s 实现AOP通常包括以下步骤: 1. **定义切点(Joinpoint)**:确定需要插入切面的代码位置,这可能是一个方法调用、类...
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 和 MySQL 之间的交互机制,以及正确配置它们的连接参数。通过使用 DataFrame API 和 Spark SQL,可以方便地在不同的数据源之间进行数据迁移和处理。在实际应用中,根据具体需求...
### 总结 `lolhttp`是Scala开发者构建HTTP服务和客户端应用的理想选择。它提供的强大功能、灵活性和高效性能,使得开发者能够在Scala环境中轻松处理HTTP通信,同时享受到Scala语言的诸多优点。通过深入理解并充分...
总结来说,Ciris是Scala开发中的一个强大工具,它的类型安全特性和丰富的功能使配置管理变得更加简单和可靠。通过熟练掌握Ciris,开发者可以更高效地处理项目的配置问题,提高代码质量和可维护性。
Spark Streaming将数据流分割成一系列小批量的数据块进行处理,这种机制使得Spark Streaming既能够处理实时数据流,又能利用Spark的核心API进行复杂的数据处理。 #### 2. Kafka简介 Apache Kafka是一种分布式的发布...
总结起来,Spark开发第三部分主要涵盖了使用Scala开发Spark应用的核心概念,包括DataFrame和RDD的操作,数据源的读写,Spark的并行计算模型,以及如何利用Scala的特性进行高效编程。通过深入学习和实践这些知识点,...
import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.connectors.kafka._ object KafkaFlinkConsumer { def main(args: Array[String]): Unit = { val env = ...
import org.apache.flink.api.scala._ object WordCount { def main(args: Array[String]) { // 初始化执行环境 val env = ExecutionEnvironment.getExecutionEnvironment // 从字符串中加载数据 val text = ...
#### 总结和展望 通过本文档的学习,您应该能够掌握AKKA的基本使用方法,并能够在PAAS平台上开发出高效可靠的Actor模式应用程序。未来,随着技术的发展,AKKA将持续更新和完善,为开发者提供更多便利和强大的工具。...
ZIO的核心概念是环境(Environment),它封装了执行上下文中的所有依赖,以及一种组合和顺序执行任务的机制。 **SQS简介** Amazon Simple Queue Service (SQS) 是AWS提供的一个完全托管的消息队列服务。它允许...