• scala函数式编程(一)


    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:/>

      

        

  • 相关阅读:
    __str__
    __call__
    私有成员
    @property
    静态方法
    静态字段
    cut qcut
    hive 函数大全
    sklearn 中的Countvectorizer/TfidfVectorizer保留长度小于2的字符方法
    numpy教程:随机数模块numpy.random
  • 原文地址:https://www.cnblogs.com/moss-yang/p/7067223.html
Copyright © 2020-2023  润新知