scala備忘(三)

一麻诀、函數(shù)當做參數(shù)

  def oncePerSecond(callback: () => Unit) {
    val random = new Random
      while(true) { 
        callback(); 
        Thread sleep 10 
        println(random.nextInt(50))
      }
  }

二痕寓、惰性賦值

//惰性賦值:當使用lazy修飾一個val成員時,其賦值情況是在需要時才賦值的(by need)
//  lazy val field = computation()

三蝇闭、協(xié)變呻率、逆變樣例

  def contravariant = {
    val a:Consumer[Bird] = new Consumer[Bird](new Bird())
//    val b:Consumer[Animal] = a // wrong 
    
    val a1:Consumer1[Bird] = new Consumer1[Bird](new Bird())
    val b1:Consumer1[Animal] = a1 //協(xié)變 向上轉型
    println(b1)
    
    val b2:Consumer1[Animal] = new Consumer1[Animal](new Animal())
//    val a2:Consumer1[Bird] = b2  // wrong
    
    val b3:Consumer2[Animal] = new Consumer2[Animal](new Animal())
    val a3:Consumer2[Bird] = b3  //逆變 向上轉型
  }

四、for表達式中的模式

import scala.collection.JavaConversions.propertiesAsScalaMap
for ((k,v)<- System.getProperties) println(k+"="+v)

五呻引、case class copy and 帶名參數(shù)

    val p1 = Person("id1","name1",11)
    val p2 = p1.copy()
    println(s"p1=$p1")
    println(s"p2=$p2")
    val p3 = p1.copy(name="name2")
    println(s"p3=$p3")

六礼仗、偏函數(shù)

val foo : Option[String] => String = {
      case Some(e) => e
      case None => "???"
    }

七、傳值調用:先計算參數(shù)表達式的值苞七,傳名調用:將未計算的參數(shù)表達式直接應用到函數(shù)內部

object Add {  
  def addByName(a: Int, b: => Int) = a + b   
  def addByValue(a: Int, b: Int) = a + b   
}  

  addByName(2, 2 + 2)  
->2 + (2 + 2)  
->2 + 4  
->6  
  
  addByValue(2, 2 + 2)  
->addByValue(2, 4)  
->2 + 4  
->6 

八藐守、CanBuildFrom

http://blog.bruchez.name/2012/08/getting-to-know-canbuildfrom-without-phd.html
  def combineValues[U, T[_]](pairs : Seq[(U, U)])
                            (implicit cbf   : CanBuildFrom[T[U], U, T[U]]): Seq[(U, T[U])] = {

    val result = LinkedHashMap[U, Builder[U, T[U]]]()

    for ((name, value) ← pairs)
      result.getOrElseUpdate(name, cbf()) += value

    result map { case (k, v) ? k → v.result } toList
  }
def combine_value = {
    val seq = Seq[(String,String)](("n1","v1"),("n2","v2"),("n1","v3"))
    println(combineValues[String,Set](seq))
  }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹂风,隨后出現(xiàn)的幾起案子卢厂,更是在濱河造成了極大的恐慌,老刑警劉巖惠啄,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慎恒,死亡現(xiàn)場離奇詭異,居然都是意外死亡撵渡,警方通過查閱死者的電腦和手機融柬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趋距,“玉大人粒氧,你說我怎么就攤上這事〗诟” “怎么了外盯?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵摘盆,是天一觀的道長。 經(jīng)常有香客問我饱苟,道長孩擂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任箱熬,我火速辦了婚禮类垦,結果婚禮上,老公的妹妹穿的比我還像新娘城须。我一直安慰自己蚤认,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布酿傍。 她就那樣靜靜地躺著烙懦,像睡著了一般驱入。 火紅的嫁衣襯著肌膚如雪赤炒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天亏较,我揣著相機與錄音莺褒,去河邊找鬼。 笑死雪情,一個胖子當著我的面吹牛遵岩,可吹牛的內容都是我干的。 我是一名探鬼主播巡通,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尘执,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宴凉?” 一聲冷哼從身側響起誊锭,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弥锄,沒想到半個月后丧靡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡籽暇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年温治,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戒悠。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬荆,死狀恐怖,靈堂內的尸體忽然破棺而出绸狐,到底是詐尸還是另有隱情卤恳,我是刑警寧澤捏顺,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站纬黎,受9級特大地震影響幅骄,放射性物質發(fā)生泄漏。R本人自食惡果不足惜本今,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一拆座、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冠息,春花似錦挪凑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至散怖,卻和暖如春菇绵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镇眷。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工咬最, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欠动。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓永乌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親具伍。 傳聞我的和親對象是個殘疾皇子翅雏,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容