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. c--socket通信TCP篇

    https://www.cnblogs.com/ashen/p/4474360.html #include <sys/socket.h> 2 #include <stdlib.h&g ...

  2. Aria2 使用手札(简易部署 + 快速进阶)

    没错,又是受够了迅雷.旋风的各种奇葩减速(哥哥我还买了了VIP!),IDM 对协议支持又太少还有事没事提示你不是正版三天两头闹着要更新.于是我想起来之前看到过的 Aria2,虽然之前也只是略有耳闻,但 ...

  3. ACM札记

    1. 逗号表达式 在“计蒜客“的ACM教程中,看到这样一段很好的代码: int n; while (scanf("%d", &n), n) { //do something ...

  4. 让CSS某行不失效

    比如百度的分享代码 <div id="bdshare" class="bdshare_t bds_tools get-codes-bdshare"> ...

  5. Mysql 用命令行导出导入数据方法

    方法一: 导出参考:https://www.cnblogs.com/activiti/p/6700044.html 用mysqldump可以导出整个数据库里的表和数据,不单单是只导出某个表的数据 命令 ...

  6. bzoj 2084 Antisymmetry - Manacher

    题目传送门 需要高级权限的传送门 题目大意 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串. 问给定长度为$n$的一个01串有多少个子串是反对称的 ...

  7. MFC限制edit控件的字符输入长度

    一. 1.Edit 控件添加EN_CHANGE事件 #define MAX_SIZE 200 void CMyDlg::OnChangeEditFeed() { // TODO: 如果该控件是 RIC ...

  8. 网络 --- 1 c/s (b/s)架构 ip 初始socket

    一.c/s   b/s c/s架构:客户端(client)/服务器(server) 软件cs架构:微信,陌陌,qq等 硬件cs架构:打印机 b/s架构:浏览器(browser)/服务器(server) ...

  9. Python3 tkinter基础 Listbox delete 删除单个、所有元素

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. 编译openwrt时报错:FMCGenericError.h:34:27: fatal error: libxml/parser.h: No such file or directory

    解决办法: 更新openwrt的feeds,并重新make menuconfig ./script/feeds update -a ./script/feeds install -a