zoukankan      html  css  js  c++  java
  • scala 学习

    继续学习: 

    https://segmentfault.com/a/1190000003068853#articleHeader2

    https://docs.scala-lang.org/tour/mixin-class-composition.html

    基础知识

    val 和 var : 一个是值,不可变;一个是变量,可变。

    val 和 def 定义函数: val  只执行一次;def 每次执行。

    call by name 和 call by value:by name 延迟加载,整个函数传入,需要时调用;by value 即通常调用

    纯函数:输入输出数据流全是显式(Explicit)的。 好处: 方便单元测试

    元组(Tuple)的好处:一次给多个变量赋值,函数返回多个值,通过模式匹配来增加可读性

    match和java和switch很像,但有区别

    • match是表达式,会返回值
    • match不需要”break”
    • 如果没有任何符合要求的case,match会抛异常,因为是表达式
    • match可以匹配任何东西,switch只能匹配数字或字符串常量

    Option

    Option用于区分None和Some,把空指针扼杀在编译阶段。

    val a: Option[String] = Some("1024")
    val b: Option[String] = None
    a.map(_.toInt)
    //res0: Option[Int] = Some(1024)
    b.map(_.toInt)
    //res1: Option[Int] = None,不会甩exception
    a.filter(_ == "2048")
    //res2: Option[String] = None
    b.filter(_ == "2048")
    //res3: Option[String] = None
    a.getOrElse("2048")
    //res4: String = 1024
    b.getOrElse("2048")
    //res5: String = 2048

    Trait

    Trait类似于Java 8 中的Interface。定义常量和方法,并可以用作多继承。

    官网上用一个例子来演示:AbsIterator作为抽象类,只定义抽象方法hasNext, next 还有类型T,对应Java中的接口; StringIterator实现方法,用于迭代获取string中每个字符,对应Java中的具体类; RichIterator不实现方法,自己定义一个foreach, 允许外部传入方法,应用于每一次迭代获取的T,类似于Java中抽象类。

    然后定义

    StringRichIterator extends StringIterator with RichIterator

    这相当于Java中做了两次extends,而多重继承是Java中不允许的。所以scala做到了Java做不到的抽象。

  • 相关阅读:
    编辑器 --- Visual Studio Code 英文界面转换成中文(简体)
    CSS3 -- column 实现瀑布流布局
    CSS3 -- 边框圆角
    CSS3 -- 弹性盒
    自适应布局要素
    Vue -- 基础知识
    Vue -- element-ui el-table 的合计在第一行显示并可点击
    如何在网页标题栏title加入logo(icon)图标?
    linux下暴力破解工具hydra【转】
    linux 服务简介
  • 原文地址:https://www.cnblogs.com/andrew-chen/p/9264212.html
Copyright © 2011-2022 走看看