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

阿弥陀佛

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

 
 
 

日志

 
 
关于我

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

网易考拉推荐

scala 偏函数  

2013-10-29 01:47:29|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
参见,scala PartialFunction 定义
trait PartialFunction[-A, +B] extends (A) => B
该语句表明偏函数:
1) 是scala中的一个源于A转换为B的特质(trait),
2) 是一个一元函数,定义域为类型-A,-表明仅仅是A或A的父类,具有“部分”的含义
3) 函数有可能“偏”离了A定义域(Type)类型,而成为值域B, +表明可以是B或B的子类,具有“全部”的含义。
例如:
  val townEleTags : PartialFunction[String, String] = {
    case "小时" => hourTownEles(areaname + hdtmk)
    case "日" | "旬" | "月" => dayTenMonTownEles(areaname + hdtmk)
    case "灾害" => dayTenMonTownEles(areaname + hdtmk)
  }
  val eleTags : PartialFunction[String, String] = {
      case "小时" => hourNcmlEles(areaname + hdtmk)
      case "日" | "旬" | "月"  => dayTenMonNcmlEles(areaname + hdtmk)
      case "灾害" => dayTenMonNcmlEles(areaname + hdtmk)
      case "病虫" =>dayTenMonNcmlEles(areaname + hdtmk)
      case "森林" => dayTenMonNcmlEles(areaname + hdtmk)
      case "作物" => dayTenMonNcmlEles(areaname + hdtmk)
  }
    这里,我没有使用def 而是使用 val 表示hdtmk(输入参数小时、日、旬、月、知识)ncml(netcdf的xml表示)element的产生模式。不仅可以是类内的方法变得更清晰,而且也可以被类外其它方法使用。
  def makeNcFileFromNcml {
    val e = if (isTown) townEleTags(hdtmk) else eleTags(hdtmk)
    val ncml = head(areaname, bns.nRow, bns.nCol, bns.lat0, bns.lon0, bns.step, datetime) + e + tail
    val inputStream = new ByteArrayInputStream(ncml.getBytes)
    val ncd = NcMLReader.readNcML(inputStream, null)
    val ncdnew = ucar.nc2.FileWriter.writeToFile(ncd, ncFnm, true)
    ncd.close
    ncdnew.close
  }
=====================================================================================
偏函数recieve在akka的Actor起到关键作用。例如:
case object Greet
case class WhoToGreet(who: String)
case class Greeting(message: String)
class Greeter extends Actor {
  var greeting = ""
  def receive : Actor.Receive = {
    case WhoToGreet(who) => greeting = s"hello, $who"
    case Greet           => sender ! Greeting(greeting) // Send the current greeting back to the sender
  }
}
而Actor.Receive的定义为:type Receive = PartialFunction[Any, Unit]
偏函数receive以case objec, case class为message Domain,返回Unit ( 即receive不会返回一个普通类型(如:String,Int等)值)
================================================================================


  评论这张
 
阅读(963)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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