1、Scala的future

  • 创建future
import scala.concurrent._
import ExecutionContext.Implicits.global
object FutureTest {
val f:Future[String]=Future{"Hello World!"}
}
  • 提供异步

Java中的Future并不是全异步的,当需要Future里的值的时候,只能用get去获取它,亦或者不断访问Future的状态,若完成再去取值,

但其意义上便不是真正的异步了,它在获取值的时候是一个阻塞的操作,当然也就无法执行其他的操作,直到结果返回。

但在Scala中,则无需担心,虽然它也提供了类似Java中获取值的方式,如下:

Future Java Scala
判断任务是否完成 isDone isCompleted
获取值 get value

但是在Scala中可以利用Callback(回调)==》onComplete(或者onSuccess/onFailure)来获取它的结果:

val f: Future[List[String]] = Future {
session.getRecentPosts
} f onComplete {
case Success(posts) => for (post <- posts) println(post)
case Failure(t) => println("An error has occured: " + t.getMessage)
}

  

2、包

Scala的代码采用了Java平台完整的包机制。可用两种方法把代码放在命名包内。

  • 一种是通过把package子句放在文件顶端的方式把整个文件内容放进包里。把文件的全部内容放进包里。如:
package  bobsrockets.navigation

class Navigator
  • 另一种是把代码放进包里的方式更像C#的命名空间。可以在package子句之后把要放到包里的定义用花括号括起来,即同一个文件嵌入不同的包
   package  bobsrockets.navigation{

//在bobsrockets.navigation包中

  class Navigator

 package  test{

//在bobsrockets.navigation.test包中

 class NavigatorSuite

    }

}
  • 常有惯例把包名和包含文件的目录相同,但是Scala和文件的布局无关。sbt项目的目录(package users)结构大概如下:
- ExampleProject
- build.sbt
- project
- src
- main
- scala
- users //Scala目录从这里开始
User.scala
UserProfile.scala
UserPreferences.scala
- test

  

3、包对象  

包可以包含类、对象和特质,但不能包含函数或变量的定义。把工具函数或常量添加到包而不是某个Utils对象,这是更加合理的做法。包对象的出现正是为了解决这个局限。每个包都可以有一个包对象。

  • 需要在父包中定义它,且名称与子包一样。
package com.nick.impatient

package object people {//包对象
val defaultName = "Nick"
}
package people {
class Person {
var name = defaultName // 从包对象拿到的常置
}
}

  

4、引用

在Scala中,import语句可以出现在任何地方,并不仅限于文件顶部。import语句的效果一直延伸到包含该语句的块末尾:这是个很有用的特性。并且可引用其他成员(类,特征,函数等)。

尤其是对于通配(_)引入而言。通过将引入放置在需要这些引入的地方,减少可能的名称冲突。

import users._  // 引用包users里面的所有
import users.User // 引用users包里的类 User
import users.{User, UserPreferences} // 引入被选中的User和UserPreferences
import users.{UserPreferences => UPrefs} //引入重命名的

 

5、注解

注解就是标签,标签是用来标记某些代码需要特殊处理的。可以在代码运行时和编译时操作。

  • 类、方法、字段局部变量、参数、表达式、类型参数以及各种类型定义
@Entity class Student

@Test def play() {}

@BeanProperty var username = _

def doSomething(@NotNull message: String) {}

@BeanProperty @Id var username = _

  

  • 构造器,需要在主构造器之前,类名之后,且需要加括号,如果注解有参数,则写在注解括号里面
class Student @Inject() (var username: String, var password: String)
  • 为表达式添加注解
(map1.get(key): @unchecked) match {...}
  • 泛型
class Student[@specialized T]
  • 实际类型
String @cps[Unit]

  

Scala实践14的更多相关文章

  1. Scala实践6

    1  if表达式 Scala中if...else..表达式是有返回值的,如果if和else返回值类型不一样,则返回Any类型. scala> val a3=10 a3: Int = 10 sca ...

  2. Scala实践7

    一.类 1.1简单类和无参方法 类的定义通过class关键字实现 scala> class Dog { | private var leg = 4 | def shout(content: St ...

  3. Scala实践5

    一.Scala的层级 1.1类层级 Scala中,Any是所其他类的超类,在底端定义了一些有趣的类NULL和Nothing,是所有其他类的子类. 根类Any有两个子类:AnyVal和AnyRef.其中 ...

  4. es6+最佳入门实践(14)

    14.模版字符串 模版字符串(template string)是增强版的字符串,定义一个模版字符串需要用到反引号 let s = `这是一个模版字符串` console.log(s) 14.1.模版字 ...

  5. Scala实践13

    1.隐式参数 方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果该参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,则自动传递. S ...

  6. Scala实践12

    1.内部类和抽象类型成员作为对象成员 内部类 在Scala中,可以让类将其他类作为成员.这些内部类是封闭类的成员.在Scala中,这样的内部类绑定到外部对象.假设希望编译器在编译时阻止我们混合哪些节点 ...

  7. Scala实践11

    1.1泛型类 泛型类是将类型作为参数的类.它们对集合类特别有用. 定义泛类型:泛型类将类型作为方括号内的参数[].一种惯例是使用字母A作为类型参数标识符,但是可以使用任何参数名称. class Sta ...

  8. Scala实践10

    1.模式匹配 模式匹配是一种根据模式检查值的机制.它是switch(Java中语句)的更强大版本,它同样可以用来代替一系列if / else语句. 句法 匹配表达式具有值,match关键字和至少一个c ...

  9. Scala实践9

    1.特征 Traits用于在类之间共享接口和字段.它们类似于Java 8的接口.类和对象可以扩展特征,但是特征不能被实例化,因此没有参数. 定义一个特征 最小特征只是关键字trait和标识符: tra ...

随机推荐

  1. Mac下SVN基本操作和常见错误

    一.基本操作 1  从服务器上下载代码 svn checkout http://xxx.xxx.xxx/xxx 2  获取最新的代码 svn update 3  提交代码 svn commit -m ...

  2. sublime text3神器插件

    (首先安装)Package Control  Package Control,就像 Linux 下的 apt-get 和 yum 一样,它是 Sublime Text 的包管理器 1.Emmet 是一 ...

  3. 如何解决vue项目中 scss 不支持 scoped 的 /deep/ 穿透写法

    如何解决vue项目中 scss 不支持 scoped 的 /deep/ 穿透写法 用过vue的人估计都用过scoped样式属性,但有时候需要穿透样式,啥办? 很多资料都说用>>> 或 ...

  4. JVM系统属性 OS环境变量 JVM启动参数

    JVM系统属性(System Properties) 1.不支持通过文件查看和设置系统属性 2.可以通过JDK自带的工具jvisulavm.exe查看 3.可以在Java程序中使用API来查看系统属性 ...

  5. windows服务器运维日常--防火墙打开后ping不通

    1. 打开防火墙,有利于安全 2. 添加80端口,支持互联网访问:添加3389端口,以支持远程桌面连接 3. 发现开了防火墙之后,ping不通网址www.mjywxy.xin 4. 查找资料和测试发现 ...

  6. P1025 最大完美度

    题目描述 定义一个字符串的完美度为字符串中所有字符的完美度的和. 现在给你一个只含字母的字符串s, 每一个字母的完美度由你进行分配, 可以分配给一个字母[1,26]中的一个数字作为完美度, 但每个字母 ...

  7. 51nod 1832 前序后序遍历

    思路:设只有一颗子树的节点有ans个设前序边历数组为pre[100],后序遍历数组为pos[100]:前序遍历的第二个元素是A的一个子节点左右节点不知,设ax-ay表示一个树的前序遍历,bx-by表示 ...

  8. 前端css图片固定宽高问题

    img需要宽高都固定时,图片往往会因此变形,此时可采用的方法有: 上述代码会使得图片居中,边缘部分不显示.这是在图片大小跟container大小差不多的情况下.如果图片很大的话,只显示中心部分是不行的 ...

  9. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  10. vue-learning:10-template-ref

    使用ref直接访问DOM元素 传统DOM操作或jQuery操作DOM,都必须是选择器先选择对应的DOM元素.比如: <button id="btn">按钮</bu ...