美文网首页
Scala基础

Scala基础

作者: allenggg | 来源:发表于2018-03-17 10:40 被阅读0次

    学习笔记摘抄于Twitter scala文档:Twitter.github.io
    next:Scala类&对象(一)

    一 、为什么选择scala

    表达能力

    • 函数是一等公民
    • 闭包

    简洁

    • 类型推断
    • 函数创建的文法支持

    Java互操作性

    • 可重用Java库
    • 可重用Java工具
    • 没有性能惩罚

    二、Scala如何工作

    1. 编译成Java字节码
    2. 可在任何标准JVM上运行
      • 甚至是一些不规范的JVM上,如Dalvik
      • Scala编译器是Java编译器的作者写的

    三、Scala基础(常量/变量/函数)

    常量

    val two = 1 + 1
    val three: Int = 3
    

    变量

    var name = "Steve"
    name = "Allen"
    

    函数(方法)

    你可以用def创建函数
    需要为函数参数指定类型签名

    def addOne(m: Int): Int = m + 1
    val three = addOne(2) //函数调用, three的值是3
    

    如果函数不带参数,你可以不写括号调用。

    def three() = 1 + 2
    val a = three() 
    val b = three
    

    匿名函数

    val func = (x: Int) => x + 1
    val three = func(2) //函数调用
    

    如果你的函数有很多表达式,可以使用{}来格式化代码,使之易读。

    def timesTwo(i: Int): Int = {
      println("hello world")
      i * 2
    }
    

    对匿名函数也是这样

    val func1 = { i: Int =>
      println("hello world")
      i * 2
    }
    

    在将一个匿名函数作为参数进行传递时,这个语法会经常被用到。

    部分应用(Partial application)函数

    • 有些地方也叫做偏应用函数
    • 你可以使用下划线“_”部分应用一个函数,结果将得到另一个函数。
    • Scala使用下划线表示不同上下文中的不同事物,你通常可以把它看作是一个没有命名的神奇通配符。在{ _ + 2 }的上下文中,它代表一个匿名参数。
    • 你可以这样使用它:
    def adder(m: Int, n: Int) = m + n
    val adder2 = adder(2, _: Int)
    val res = adder(3) //调用部分应用函数,得到5
    

    你可以部分应用参数列表中的任意参数,而不仅仅是最后一个。

    柯里化函数

    def multiply(m: Int)(n: Int): Int = m * n
    val res = multiply(2)(3) //调用函数
    

    你可以填上第一个参数并且部分应用第二个参数。

    val timesTwo = multiply(2) _
    val res = timesTwo(3) //return 6
    

    你可以对任何多参数函数执行柯里化。例如之前的adder函数

    val newFunc = (adder _).curried
    

    可变长度参数

    这是一个特殊的语法,可以向方法传入任意多个同类型的参数。例如要在多个字符串上执行String的capitalize函数,可以这样写:

    def capitalizeAll(args: String*) = {
      args.map { arg =>
        arg.capitalize
      }
    }
    var res = capitalizeAll("rarity", "applejack")
    

    next:Scala类&对象(一)

    相关文章

      网友评论

          本文标题:Scala基础

          本文链接:https://www.haomeiwen.com/subject/sewdqftx.html