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. 如何获取STM32 MCU的唯一ID及应用(转)

    源: 如何获取STM32 MCU的唯一ID

  2. DBCP数据库连接池的使用

    DBCP的简单介绍: DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由apache开发通过数据库连接池可以让程序自动管理数据库连接的释放和断开 ...

  3. DOS下读取PCI配置空间信息的汇编程序(通过IOCF8/IOCFC)

    汇编程序编写的读取PCI配置空间信息的代码(通过IOCF8/IOCFC): ;------------------------------------------------ ;功能: 读取PCI 配 ...

  4. 使用 select 实现 goroutine 超时

    虽然携程是Go语言中一个新的概念,嗯,但它本质上依然是属于多线程.超时机制是多线程中是一个非常重要的保障程序的鲁棒性的一个措施:错误是很难预估的,在多线程中更为显著,更容易出现难以预料的错误. 一个异 ...

  5. MySql数据库概念

    一.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行 ...

  6. ThirdAPI

    //public class ThirdAPI //{ // [DllImport("ThirdAPI.dll")] // public static extern int Ini ...

  7. Codeforces 817C Really Big Numbers - 二分法 - 数论

    Ivan likes to learn different things about numbers, but he is especially interested in really big nu ...

  8. CentOS6.8下安装mysql

    转自https://blog.csdn.net/jeffleo/article/details/53559712?utm_source=itdadao&utm_medium=referral ...

  9. topcoder srm 688 div1 -3

    1.给出一个只包含'(',')'的字符串$s$,现在对它进行若干次如下操作使其变成匹配的括号串(每次操作包含3个步骤):(1)选择 $L,R,L\leq R$;(2)将$L,R$之间的字符翻转:(3) ...

  10. 关于scrapy 使用代理相关问题

    在scrapy中使用代理时,我们不能保证每个代理都可用,难免出现代理ip错误的情况,如果代理ip出现错误设置一个请求超时和重新发送这个链接 在yield scrapy.Request时候加上一个参数: ...