注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

scala First-class functions----函数为“一等公民”  

2013-07-01 15:39:09|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在C++,Java,C#等面向对象语言中,方法或函数处于“二等公民”(Second Class)位置,甚至不能够将函数作为参数为其它函数使用。
在Scala中,这种局面被彻底扭转——函数在语言中居于“一等公民”(First Class)位置,函数或方法可以像数值参数一样,成为其它函数或方法的参数。
--------------------------------------------------------------------
object Main extends App {
    val max = (x: Int, y: Int) => if (x < y) y else x
    val anonfun2 = new Function2[Int, Int, Int] {
       def apply(x: Int, y: Int): Int = if (x < y) y else x
     }
     assert(max(0, 1) == anonfun2(0, 1))
}
--------------------------------------------------------------------
val xs = (x: Int, mn:Int, mx: Int, s:String) => if (x >=mn && x<=mx) s else ()
val x01 = xs(5, 1,10,"01")     //01
val x01 = xs(11, 1,10,"01")   //()
-----------------------------------------------------------------------------------------------------
val xs  =(x:Int)=>if (x>=21) "21" else if (x>=11) "11" else if (x>=1) "01" else ""
val s=xs(22).toString
输出为:21

val xs  =(x:Int)=>if (x>=21) "下旬" else if (x>=11) "中旬" else if (x>=1) "上旬" else ""
val s=xs(15).toString
-----------------------------------------------------------------------------------------------------
scala> var increase = (x: Int) => x + 1
increase: Int => Int = <function1>
scala> increase(10)
res0: Int = 11
--------------------------------------------------------------------
scala> val someNumbers = List(11,10,5,0, 5, 10)
scala> someNumbers.foreach((x: Int) => println(x))
11
10
5
0
5
10
scala> someNumbers.filter((x: Int) => x > 5)
res3: List[Int] = List(11, 10, 10)
----------------------------------------------------------
scala> someNumbers.filter((x) => x > 5)   //去掉Int
res4: List[Int] = List(11, 10, 10)
-------------------------------------------------------------------
someNumbers.filter(x => x > 5)   //去掉括号
res6: List[Int] = List(11, 10, 10)
-------------------------------------------------------------------
someNumbers.filter(_ > 5)   //占位符
res7: List[Int] = List(11, 10, 10)
scala> someNumbers.foreach(println _)
11
10
5
0
5
10
甚至写成
someNumbers.foreach(println)
11
10
5
0
5
10
------------------------------------------------------------------
scala>val f = (_: Int) + (_: Int)
f: (Int, Int) => Int = <function2>
scala> f(2,3)
res8: Int = 5
----------------------------------------------------------------------
scala> def sum(a: Int, b: Int, c: Int) = a + b + c
sum: (a: Int, b: Int, c: Int)Int

scala> val a = sum _
a: (Int, Int, Int) => Int = <function3>

scala> a(1, 2, 3)
res10: Int = 6
----------------------------------------------------------------------
scala> val b = sum(1, _: Int, 3)
b: Int => Int = <function1>

scala> b(2)
res11: Int = 6
------------------------------------------------------------------
  评论这张
 
阅读(488)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017