首页 > 其他 > 详细

scala 函数

时间:2015-09-12 02:05:32      阅读:283      评论:0      收藏:0      [点我收藏+]

?

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 函数

原文:http://blackproof.iteye.com/blog/2242774

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!