-
缺失部分 例子1: (x: Int) => x*x 例子2: (x: Int,y: Int) => x+y 例子3: var add = (x: Int,y: Int)=> x+y //add是一个具有函数类型的变量 add(1,2) //返回值:Int = 3 def greeting() = (name:String) => {s"Hello $name"} greeting()("World") ========================================= def greeting(age: Int) = (name:String) => {s"Hello $name,your age is $age"} greeting(23)("Flygar") >Hello Flygar,your age is 23查看全部
-
缺失部分 例子1: (x: Int) => x*x 例子2: (x: Int,y: Int) => x+y 例子3: var add = (x: Int,y: Int)=> x+y //add是一个具有函数类型的变量 add(1,2) //返回值:Int = 3 def greeting() = (name:String) => {s"Hello $name"} greeting()("World") ========================================= def greeting(age: Int) = (name:String) => {s"Hello $name,your age is $age"} greeting(23)("Flygar") >Hello Flygar,your age is 23
查看全部 -
http://www.slideshare.net/Ordersky/oscon-keynote-working-hard-to-keep-it-simple查看全部
-
一、概念:In computer science,functional programming is a programming paradigm--a style of building the structure and elements of computer programs--that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. 在计算机科学领域,函数式编程是一种编程范式,它是一种构建计算机程序结构的方法和风格,它把程序当做数学函数的求值过程并且避免了改变状态和可变的数据。 二、函数式编程的重要概念: 2.1 纯函数(Pure Function),或函数的纯粹性(Purity),没有副作用(Side Effect)。 副作用是状态的变化(mutation):例子:修改全局变量,抛出异常,IO读写,调用有副作用的函数。 2.2 引用透明(Referential Transparency):对于相同的输入,总是得到相同的输出。 如果f(x)的参数x和函数体都是引用透明的,那么函数f是纯函数。 2.3 不变性(Immutability)为了获得引用透明性,任何值都不能变化。 2.4 函数是一等公民(First-class Function):一切都是计算,函数式编程中只有表达式,变量、函数都是表达式。 三、高阶函数(Higher order Function) 闭包(Closure) 表达式求值策略:严格求值 和 非严格求值 Call By Value vs. Call By Name 惰性求值(Lazy Evaluation):定义表达式不会立即求值,用到后才会求值。 递归函数,函数式编程没有循环,循环由递归实现。调优递归:尾递归。 scala为什么会受推崇: 1.摩尔定律失效: 一个芯片上面的电子元器件的个数是有极限的 2.多核处理器: 进入多核时代,编程模型发生改变,传统的编程范式(java、c)会非常复杂,开发成本大,容易出错,质量难以保证。函数式编程是最适用于并行编程。查看全部
-
三种变量修饰符 - val 定义 immutable variable(常量) - var 定义 mutable variable(变量) - lazy val (定义惰性求值的常量) _*可以不显示指定变量的类型,因为Scala会自动进行类型推导_ --- String - 构建于Java的String之上 - 新增了字符串插值(interpolation)的特性 ```scala val myname = "lizhy" \\ creating a String s"My name is ${myname}" \\ String interpolation ``` 在scala语言中,所有的事物都是对象查看全部
-
call by value 对函数实参求得值后再才传给函数,且仅求一次--常用
call by name 函数实参每次在函数体内被用到时才会求值;形参以=>开头,会使用call by name
查看全部 -
Any 是所有类型的父类,AnyVal是所有值类型的父类,AnyRef是所有引用类型的父类,Null是所有引用类型的子类,Nothing是所有类型的最后一个子类。
查看全部 -
Map
定义:val p = Map(key->value)
取值:p(key)
是否包含key:p.contains(key)
p的所有key值或value值:p.keys 或 p.values
插值:p + (key->value) (单个值) p++List(k->v,k->v)(多个值)
删值:p - key (单个值) p--List(k1,k2,k3)(多个值)
查看全部 -
List基本语法:
定义:val a = List(1,2,3,4),val b = 1::2::3::4::Nil
数据与集合拼接:val b = 0::a(只能拼在前面)
集合与集合拼接:a:::b或a++b
head:取得List头部数据
tail:取得List除头部数据外的集合
isEmpty:集合是否为空
查看全部 -
Scala语言的类型体系,和Java类似和任何语言定义数据类型时的考虑都是一致的分而治之的思想,人类解决复杂问题的根本思想!查看全部
-
搭建Scala的运行环境 1:安装JDK——因为Scala语言是在jvm之上构建的 2:安装Scala运行环境——因为我们要运行Scala语言编写的程序 3:安装sbt——这个是构建Scala程序的工具 4:安装repl——这个是工具适合编写简单的Scala程序 5:安装ide——这类工具适合编写复杂的Scala程序 对于任何编程语言几乎都是类似的,都需要基本的运行环境、编程环境、构建环境等等。然后,才能编写对应的程序,辰方也编写了几个简单的程序,感觉还好,不过这些都是最基本,还没有看出来对于多线程、云计算方面编程的优势所在,继续!查看全部
-
阅读材料地址 http://docs.scala-lang.org/overviews/collections/introduction.html查看全部
-
list高级使用 filter 过滤掉为false的元素 takeWhile 取元素,直到为false就不取了查看全部
-
call by value:先对实参进行表达式的求值,求值完在传给形式参数x,y。在函数调用之前,先对实参表达式进行求值,求完值以后再传给实参,在进行函数调用。 call by name:不需要对实参表达式进行求值,直接把表达式传给函数体,替换所对应的参数,且只有这个传入的表达式被正式用到时才会求值。查看全部
-
语言特性: 可伸缩编程语言。 纯正的面向对象语言。 函数式语言。 构建于jvm之上,能互相直接调用,无缝和java互操作。 课程大纲: 函数式编程思想; 搭建Scala开发环境; 语言基础; 类型和求值策略; 非常重要的函数的概念; Scala Immutable Collections查看全部
举报