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. usb帧格式

    源: usb帧格式

  2. centos7 static for django2.1

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  3. spring boot mvc系列-静态资源配置与MappingHandler拦截器

    静态资源配置 Spring Boot 默认将 /** 所有访问映射到以下目录: classpath:/static classpath:/public classpath:/resources cla ...

  4. Codeforces 839A Arya and Bran

    Bran and his older sister Arya are from the same house. Bran like candies so much, so Arya is going ...

  5. java中读取配置文件的方法

    转自:http://blog.csdn.net/stypace/article/details/38414871 一.使用org.apache.commons.configuration 需要使用的是 ...

  6. 在Linux系统安装Appium

    安装sudo apt-get update sudo apt-get install nodejs sudo apt-get install npm npm install -g appium 卸载: ...

  7. Selenium Java Selection的使用

    用于向具有drop-down的选择框中输入内容 new Select(new ChromeDriver().findElement(By.cssSelector(" ..."))) ...

  8. Junit中的setUp()与setUpBefore(), tearDown()与tearDownAfterClass()解析

    @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static vo ...

  9. route 工具

    route工具 route工具主要用来查看或修改内核路由表 查看内核路由表 route [-nee] 参数说明: -n:不要使用协议或主机名称,直接使用 IP 或 port number:-ee:使用 ...

  10. R t-test cor.test

    a = c(175, 168, 168, 190, 156, 181, 182, 175, 174, 179)b = c(185, 169, 173, 173, 188, 186, 175, 174, ...