scala函数编程特点:

  1、Scala函数使用命名参数;

    即函数参数传递的实参与函数名相对应,与函数位置不对应。

    object Test {

      def main(args: Array[String]) { printInt(b=5, a=7);

     }

     def printInt( a:Int, b:Int ) = {

      println("Value of a : " + a ); println("Value of b : " + b ); }

     }  

    C:/>scalac Test.scala
    C:/>scala Test
    Value of a : 7
    Value of b : 5     C:/>

  2、Scala提供按名称参数调用函数。

    即按名称调用机制传递一个代码块给被调用者并且每次被调用方传接入参数,代码块被执行,值被计算。

    意思就是不仅可以传参数值,也可以传递一个函数名称,在函数被执行时,传递的函数名称找到对应的函数代码并执行函数。

    object Test {

      def main(args: Array[String]) {

        delayed(time()); } def time() = {

        println("Getting time in nano seconds")

            System.nanoTime

         }

      def delayed( t: => Long ) = {

        println("In delayed method")

        println("Param: " + t)

        t

      }

    }

    C:/>scalac Test.scala

    C:/>scala Test

      In delayed method

      Getting time in nano seconds

      Param: 81303808765843

      Getting time in nano seconds

     C:/>

  3、Scala函数使用可变参数

    使用可变参数,可以理解为参数可以是指针类型,与C语言中指针的调用类似。

  4、可以使用递归

  5、可以使用默认参数值

  6、Scala高阶函数

    即函数参数有多个,参数可以是函数名也可以是具体的参数

    object Test {

    def main(args: Array[String]) {

      println( apply( layout, 10) )

      }

      def apply(f: Int => String, v: Int) = f(v)

      def layout[A](x: A) = "[" + x.toString() + "]"

   }

  C:/>scalac Test.scala

   C:/>scala Test [10]

  C:/>

  7、Scala嵌套函数

  Scala允许在一个函数内部定义其他函数定义的函数,并可被局部函数调用。

    object Test { def main(args: Array[String]) {

      println( factorial(0) )

      println( factorial(1) )

      println( factorial(2) )

      println( factorial(3) )

    }

    def factorial(i: Int): Int = { 

       def fact(i: Int, accumulator: Int): Int = {

       if (i <= 1)

        accumulator

       else

         fact(i - 1, i * accumulator)

       }

       fact(i, 1)

       }

     }

    C:/>scalac Test.scala  

     C:/>scala Test 1 1 2 6

     C:/>

  

    

scala函数式编程(一)的更多相关文章

  1. Scala函数式编程进阶

    package com.dtspark.scala.basics /** * 函数式编程进阶: * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量: * 2, 函数更长用的方式 ...

  2. Scala函数式编程——近半年的痛并快乐着

    从9月初啃完那本让人痛不欲生却又欲罢不能的<七周七并发模型>,我差不多销声匿迹了整整4个月.这几个月里,除了忙着讨食,便是继续啃另一本"锯著"--<Scala函数 ...

  3. Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析

    Scala函数式编程 ----------------------------------------------------------------------------------------- ...

  4. 9、scala函数式编程-集合操作

    一.集合操作1 1.Scala的集合体系结构 // Scala中的集合体系主要包括:Iterable.Seq.Set.Map.其中Iterable是所有集合trait的根trai.这个结构与Java的 ...

  5. Scala函数式编程(三) scala集合和函数

    前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...

  6. Scala函数式编程(四)函数式的数据结构 上

    这次来说说函数式的数据结构是什么样子的,本章会先用一个list来举例子说明,最后给出一个Tree数据结构的练习,放在公众号里面,练习里面给出了基本的结构,但代码是空缺的需要补上,此外还有预留的test ...

  7. Scala函数式编程(四)函数式的数据结构 下

    前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结 ...

  8. scala 函数式编程之集合操作

    Scala的集合体系结构 // Scala中的集合体系主要包括:Iterable.Seq.Set.Map.其中Iterable是所有集合trait的根trai.这个结构与Java的集合体系非常相似. ...

  9. 大数据笔记(二十五)——Scala函数式编程

    ===================== Scala函数式编程 ======================== 一.Scala中的函数 (*) 函数是Scala中的头等公民,就和数字一样,可以在变 ...

  10. Scala函数式编程(五) 函数式的错误处理

    前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结 ...

随机推荐

  1. Eureka-zookeeper的服务发现替代方案

    参考: https://my.oschina.net/thinwonton/blog/1622905 http://www.open-open.com/lib/view/open14269407225 ...

  2. devexpress 10.0升级为 15

  3. Examples of Scikit-learn Usages

    Examples of Scikit-learn Usages KFold K-折交叉验证 >>> import numpy as np >>> from skle ...

  4. 锁(lock)和闩(latch)

    开发多用户.数据库驱动的应用时,最大的难点之一是:一方面要力争取得最大限度的并发访问,与此同时还要确保每个用户能以一致的方式读取和修改数据.为此就有了锁定(locking)机制,这也是所有数据库都具有 ...

  5. PHP 重置数组为连续数字索引的几种方式

    原文链接:https://blog.csdn.net/zhang197093/article/details/78606916 推荐的方式  array_values 方法 这样方式无论对普通数组还是 ...

  6. 如何用Tensorflow训练模型成pb文件和和如何加载已经训练好的模型文件

    这篇薄荷主要是讲了如何用tensorflow去训练好一个模型,然后生成相应的pb文件.最后会将如何重新加载这个pb文件. 首先先放出PO主的github: https://github.com/ppp ...

  7. 【Python58--正则2】

    一.字符匹配 1.元字符:完整列表:.   ^   $   *   +   ?   { }   [ ]   \   |   ( ) 元字符 描述 .点 匹配除换行符外任意一个字符 x|y 匹配 x 或 ...

  8. 使用SSH框架遇到的错误总结

    1.org.hibernate.exception.ConstraintViolationException: could not insert: 如果是主键是自增序列,映射文件 指定主键生成器< ...

  9. PyCharm史上最强攻略

    Ctrl + D 复制选定的区域或行 Ctrl + Y 删除选定的行 Ctrl + Alt + L 代码格式化 Ctrl + Alt + O 优化导入(去掉用不到的包导入) Ctrl + 鼠标 简介/ ...

  10. P4556 [Vani有约会]雨天的尾巴

    目录 思路 优化 过程中的问题/疑问 错误 代码 思路 每个节点维护一课线段树(当然是动态开点) 线段树的作用是统计这个节点有多少种粮食型号,以及最多的粮食型号 然后树上差分,u和v点 +1,lca( ...