Scala——函数

import java.util.Date
import java.util.concurrent.atomic.DoubleAccumulator

/**
  * Created by vincentliu on 7/17/2017.
  */
object HelloWorld {

  def main(args: Array[String]): Unit = {

    println("=======函数传名调用=======")
    delayed(time())
    println("=======指定函数参数名=======")
    printInt(b = 1, a = 10)
    println("=======可变参数=======")
    printStrings("Runoob", "Scala", "Python")
    println("=======递归函数=======")
    for (i <- 1 to 10)
      println(i + "的阶乘为:" + factorial(i))
    println("========默认参数值======")
    println("返回值:" + addInt(b = 1));
    println("========高阶函数======")
    println(apply(layout, 10))
    println("========函数嵌套======")
    println(factorial(6))

    // 匿名函数
    println("=========匿名函数=====")
//    var inc = (x: Int) => x+1
    var inc = new Function1[Int, Int]{
      def apply(x: Int):Int = x + 1
    }
    println(inc(2))

    // 偏应用函数
    println("=======偏应用函数=====")
    var date = new Date()
    log(date, "message1")
    var logWithDateBound = log(date, _ : String)
    logWithDateBound("message2")

    // 函数柯里化
    println("========函数柯里化=====")
    println(strcat("hello, ")(" scala!"))
  }

  /**
    * 函数传名调用
    * @return
    */
  def time() = {
    println("获取时间,单位为纳秒")
    System.nanoTime()
  }

  def delayed(t: => Long) = {
    println("在delayed方法内")
    println("参数:" + t)
    t
  }

  /**
    * 指定函数参数名
    * @param a
    * @param b
    */
  def printInt(a:Int, b:Int) = {
    println("Value of a : " + a)
    println("Value of b : " + b)
  }

  /**
    * 可变参数
    * @param args
    */
  def printStrings( args:String* ) = {
    var i : Int = 0
    for( arg <- args){
      println("Arg value[" + i + "] = " + arg)
      i = i + 1
    }
  }

  /**
    * 递归函数
    * @param n
    * @return
    */
  def factorial(n: BigInt): BigInt = {
    if (n <= 1)
      1
    else
      n * factorial(n - 1)
  }

  /**
    *   默认参数值
    * @param a
    * @param b
    * @return
    */
  def addInt(a:Int = 5, b:Int = 7) : Int = {
    var sum:Int = 0
    sum = a + b
    return sum
  }

  /**
    *   高阶函数 (高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果
    *   函数 f 和 值 v 作为参数,而函数 f 又调用了参数v
    * @param f
    * @param v
    * @return
    */

  def apply(f: Int => String, v: Int) = f(v)    //  第一个Int是指定函数f的参数类型, String是指函数f的返回类型,
  def layout[A](x: A) = "[" + x.toString() + "]"

  /**
    *  函数嵌套
    * @param i
    * @return
    */
  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)
  }

  /**
    * 偏应用函数
    * @param date
    * @param message
    */
  def log(date: Date, message: String) = {
    println(date + "-----" + message)
  }

  /**
    * 函数柯里化
    * @param s1
    * @param s2
    * @return
    */
  def strcat(s1: String)(s2:String) = {
    s1 + s2
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值