betway必威-betway必威官方网站
做最好的网站

Scala基础语法,容器的使用

update()方法

update()方法能够用来“更新”Map对象。因为咱们用的Map是三个不改变的类的对象,它的“更新”并不会影响在此之前的目的,它会再次回到贰个新的靶子。

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")val updatedRoster = roster.updated("Jane", "Nurse")println("Jane"    " is a "   roster("Jane") )println("Jane"    " is a "   updatedRoster

施行结果如下:

betway必威官方网站 1

scala隐式转变

能够自定义隐式函数,即implictit function。定义的隐式转变函数,会被scala在供给改变的动静自行使用。因为编写翻译器必要对隐式函数进行导入,因而普通采用"one2one"的命名方式。

Older类型转化为SpecialPerson类型

List

在scala中Set和Map都有可变和不改变二种完毕,可是List唯有不变的贯彻。scala中的List实现多少看似于java的LinkedList。scala的List的半数以上操作都是围绕head和tail实行的。

正如是三个List使用的身体力行,大家要拜候List示例的率先个要素得以动用list.head()方法也足以向来执行list:

val list1 = List("Red", "Yellow", "Blue")println(list1.head)println(list1)

实践结果是:

betway必威官方网站 2

List集合

  • list是二个稳步且能够再度的队列。
  • 创建list集合 List(elem1, elem2...)那些因素得以不是同等档次
  • list组成结构
    list.head 再次来到list集合中的率先个要素
    list.tail 重回除了list.head以外的全数因素(也是个list集合);如若原list只有一个因素,则赶回Nil(那是一个类,特地用来表示空的list集结)。
  • list添美金素(:: 操作符只适用于list会集)
  • 创制可变的list集合(能够选取 =、 =、-=、--=运算符),并添法郎素。注意:可变与不足变能够相互调换
  • betway必威官方网站,Set集结和List一样,分可变和不得变Set集结。不过set集结中的成分是冬季且从未再一次的。

()方法

()方法用来拼接多少个Set。示例代码如下:

val colors1 = Set("Blue", "Green", "Red", "yellow")val colors2 = Set("White", "Black")val combinedSet = colors1    colors2println(combinedSet mkString ",")

一点也不细略的主次,看一下结果:

betway必威官方网站 3

scala中的形式相配

scala中从不提供switch case语法,相应的是: 变量 match{case 值 => 代码}语法。它的脾气在于:能够同盟任何意况,富含相配值、类型、集合的成分等。

非凡会集的成分,相配List集结时,要求使用::操作符

filterKeys()方法

filterKeys()方法用来对Map的key进行过滤,示例代码如下:

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")val filteredMap = roster filterKeys (_ contains ("Jac"))println("Filtered Size : "   filteredMap.size)

实施结果如下:

betway必威官方网站 4

scala中的trait类

  1. 类能够使用extends关键字,但是在scala中并未有implement,但trait类能够当作接口来行使。统一使用extends
  2. 此伏彼起trait类后,必须兑现其中的空洞方法。
  3. 使用extends ··· with ···达成多种承继trait类
  4. trait类能够定义抽象方法、具体方法(会被持续)、抽象字段、具体字段(会被持续)。
  5. 多少个trait类有同等的法门,则从持续的逐个最左边,然后往右依次实施

::()方法

本条点子用于在List前添澳成分。a :: list能够读作“在List前加多a”。示例代码如下:

val list1 = List("Red", "Yellow", "Blue")val list2 = "Black"::list1println(list1.mkString(","))println(list2.mkString(","))

进行结果如下:

betway必威官方网站 5

Scala面向对象性情

  • 半生类和半生对象
    1. 可以相互访谈私有属性
    2. 同名且在同一scala文件中
  • 半生指标中的apply方法可以落成,构造对象的时候不使用new关键字
  • 主构造方法
  1. 主构造方法的参数直接跟在类名前边
  2. 主构造方法的函数体就是类中除了别的方法的全数代码,会在new二个指标的时候实行
  3. 假使参数不评释val大概var,则也正是private[this],只好在其间采用
  • 字段的访问性
  1. var name = “” 在编译的时候会把那一个字段变为私有的,可是会对外提供get和set方法,那样就足以不用自个儿定义get和set方法
  2. private var name = “” 生成的get和set方法不会对外
  3. val 定义的唯有get方法
  4. private[this] 定义的只可以在对象中使用。
  5. def name = {} 能够自定义get;def name_=(){} 能够自定义set方法(注意_两侧不能够有空格)

Set

群集元素映射

  • yield关键字会把近来结果记下来,保存在一个新的聚合中,循环截至后,再次回到新的汇合(原本是什么样品种的集聚就回到什么类型)
  • filter和map函数
    _标志用来表示各种元素
    filter函数对不满足表明式的扩充过滤
    map函数对每一种元素实行操作后回到新的值

get()方法

get()方法用来从Map中取值,不过再次来到值的类型是Optional[T],示例代码如下:

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")println("Jack"    " is a "   (roster get "Jack").get )

说实话,笔者不太喜欢Optional,幸而scala没有须求让自家经受那些事物,它还提供了另一种更轻巧的拿走kv对的法子:

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")println("Jack"    " is a "   roster

在上面包车型客车代码里我们一向在Map对象前面使用了五个括号来取值。后面曾涉嫌过,这是利用了Map的三个厂子方法apply。

scala中的四线程

三个线程之间通讯示例

import scala.actors.Actor

/**
 * Created by wulei on 2016/12/27 0027.
 */
object Student {
  // 让这个类支持模式匹配
  case class Message(content: String, sender: Actor)

  // 多线程必须继承Actor类
  class LeoActor extends Actor {
    // 类型java中的run方法,需要重写
    def act() {
      while (true) {
        // 接受消息
        receive {
          case Message(content, sender) => {
            // 打印接受的消息
            println("leo: "   content)
            // 向这个线程发送消息(这里是字符串)
            sender ! "please call me after 10 minutes."
          }
        }
      }
    }
  }

  class JackActor(val LeoActor: Actor) extends Actor {
    def act() {
      // 向一个线程发送消息(这里是一个对象)
      LeoActor ! Message("Hello , leo, I'm Jack. Are you free Now?", this)
      while (true) {
        // 接收消息
        receive {
          case resphone: String => println("Jack: "   resphone)
        }
      }
    }
  }

  def main(args: Array[String]): Unit = {
    val leo = new LeoActor()
    val jack = new JackActor(leo)
    leo.start() //启动线程
    jack.start()
  }
}

运作结果

此番联合看一下scala中容器类的多少个形式。

高阶函数

  1. 函数作为参数传递
  1. 函数作为重临值

本文由betway必威发布于编程开发,转载请注明出处:Scala基础语法,容器的使用

TAG标签: betway必威
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。