scala 函数

本文深入探讨了Scala中函数的多样应用,包括正常函数、无返回值函数、映射式定义、缺省函数、变长参数、函数参数、滑动写法、隐式函数、函数变量、匿名函数、偏函数等特性,并通过实例代码进行详细解析。

 

scala函数:

 

1.正常函数

  def normalReturn(x:Int,y:Int):Double ={
    return x*y*0.1;
  }

 

 2.没有返回值,不要等号,或是返回值为Unit

  def noRetrun():Unit = {
    println("1000")
  }
  def noRetrun2(x:Any) {
    println("no return")
    return x
  }

 

3 映射式定义 从int到double

  def f:Int=>Double = {
    case 1 => 0.1
    case 2 => 0.2
    case _ => 0.0
  }

 

 4.映射式定义  返回对象

  def f2:Option[User]=>User={
    case Some(x) => x
    case None => new User(1)
  }

 

5.映射式定义  多对一

  def mm:(Int,Int)=>Int = _+_;
  def mm2:Int=>Int = 30+_

 

 6.缺省函数

def join(a:List[String], s:String="-") = { a.mkString(s) }

 

7.变长参数 相当于java的...

  def sum22(ns: Int*) = {
    var s = 0
    for (n<-ns) s += n
    s
  }

    从左到右相减

def sum33(ns:Int*) = ns.reduceLeft(_-_)

 

8.函数参数  

 def somefunc(fuc:ClassDemo=>Boolean):Int={
    val funcre = fuc(new ClassDemo("zk","demo"))
    val result = if(funcre) 1 else 0
    result
  }
//函数参数,_是映射左边的参数,那个classDemo对象
    val r = somefunc ( _.getHost() > 10 )
    println(r)

 

9.slide写法,参数T

  def mylock[T](str:String)(func: => T):T={
    println(str)
    func
  }

  

    val r2=mylock("lock"){
      println("do some")
      1
    }

 

10.implicit函数,将引用本方法的类的String参数转为Long,(这里是为了科学计数法转换)

  implicit def typeConvertor(input:String):Long={
    var bd = BigDecimal(input)
    bd.toLongExact
  }

 

11.函数变量

var m = (x:Int,y:Int)=>x*y;

 

12.匿名函数

    //匿名函数(直接一个映射加上括号里的参数)
    println(((i:Int)=> i*i)(3))
    println(((j:Int,i:Double)=> i*j)(10,0.1))

 

13.偏函数   _ 用下划线代替1+个参数的函数

    val p0 = sum _ // 正确 
//    val p1 = sum(10,_,20) // 错误
    val p2 = sum(10,_:Int,_:Int) // 正确
    val p3 = sum(_:Int,100,_:Int)
    println(p0(1,2,3)) // 6
    println(p2(10,20)) // 130
    println(p3(10,1)) // 111
    
    println(((i:Int, j:Int) => i+j)(3, 4))
    println(((_:Int) + (_:Int))(3,4) )

 

 再加几个例子

函数参数

  def ffparam(x:Int, y:Int, m:(Int, Int)=>Int):Int={
    val x1 = x*10;
    val y1 = y*10;
    
    return m(x1,y1)
  }

 函数式,比较简单难懂

    val f1 = (n:Int) => 1 to 3 map (_*n) mkString " ";
    println(1 to 3 map f1 mkString "\n") //用f函数也可以,用f1也可以

 再来个Curry化

    
   println(sum(1)(3)) 
  def sum(a:Int)(b:Int) = { a + b } // sum(1)(2) = 3

 

 

 

 

Scala 是一门多范式编程语言,融合了面向对象和函数式编程的特性,函数是构建程序的基本组成部分之一 [^1]。 ### 函数介绍 Scala 具有丰富的函数式编程特性,如高阶函数、匿名函数、闭包、柯里化和控制抽象等 [^2]。高阶函数可以将函数作为参数或返回值;匿名函数是一种没有显式名称的函数;闭包是指有权访问另一个函数作用域中的变量的函数;柯里化是将一个多参数函数转换为一系列单参数函数;控制抽象则允许用户定义类似语言内置控制结构的函数 [^2]。 ### 使用方法 以下是不同类型函数的使用示例: - **高阶函数**: ```scala // 定义一个高阶函数,接受一个函数和一个整数,对整数应用该函数 def applyFunction(f: Int => Int, x: Int): Int = f(x) // 定义一个普通函数 def square(x: Int): Int = x * x // 使用高阶函数 val result = applyFunction(square, 5) println(result) ``` - **匿名函数**: ```scala // 定义并使用匿名函数 val add = (a: Int, b: Int) => a + b val sum = add(3, 4) println(sum) ``` - **闭包**: ```scala // 闭包示例 def multiplier(factor: Int) = (x: Int) => x * factor val timesTwo = multiplier(2) println(timesTwo(5)) ``` - **柯里化**: ```scala // 柯里化函数示例 def add(a: Int)(b: Int): Int = a + b val addThree = add(3) println(addThree(5)) ``` ### 特性 - **函数作为一等公民**:在 Scala 中,函数可以作为值进行传递、存储在变量中、作为参数传递给其他函数或作为函数的返回值 [^2]。 - **操作符即方法**:Scala 中的 + - * / % 等操作符实际上是方法,例如 `a + b` 等价于 `a.+(b)` [^3]。 - **无括号调用**:对于无参数的方法,调用时可省略方法名后面的括号 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值