115官脓、Scala編程進階之提取器實戰(zhàn)詳解

apply方法
伴生類和伴生對象的概念哗蜈,companion class和companion object
伴生對象里面前标,可以定義一個apply方法
直接調(diào)用類(參數(shù)),方式距潘,就相當于在調(diào)用apply方法
此時在apply方法中炼列,通常來說(也不一定),會創(chuàng)建一個伴生類的對象音比,返回回去

這種方式唯鸭,有一個好處,創(chuàng)建對象呢硅确,非常的方便
不要每次都是new 類(參數(shù))目溉,類(參數(shù))

提取器

就是unapply方法

和apply方法,顧名思義菱农,那就是反過來
apply方法缭付,可以理解為,接收一堆參數(shù)循未,然后返回一個對象
unapply方法陷猫,可以理解為,接收一個字符串的妖,解析成一個對象的各個字段

提取器就是一個包含了unapply方法的對象绣檬,跟apply方法正好相反
apply方法,是接收一堆參數(shù)嫂粟,然后構(gòu)造出來一個對象
unapply方法娇未,是接收一個字符串,然后解析出對象的屬性值

class Person(val name: String, val age: Int)

object Person {

  def apply(name: String, age: Int) = new Person(name, age)
  
  def unapply(str: String) = {
    val splitIndex = str.indexOf(" ")
    if (splitIndex == -1) None

    else Some((str.substring(0, splitIndex), str.substring(splitIndex + 1)))
  }
  
}

val Person(name, age) = "leo 25"

name
age

樣例類的提取器實戰(zhàn)詳解

scala中的樣例類星虹,說白了零抬,也很簡單
類似于java中的javabean
java中的JavaBean,包含了一堆屬性宽涌,field; 每個field都有一對getter和setter方法

public class Person {
    
    private String name;
    private int age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
}

scala中的樣例類平夜,默認就是提供apply方法和unapply方法的

case class Person(name: String, age: Int)

val p = Person("leo", 25)

p match {
    case Person(name, age) => println(name + ": " + age)
}

只有一個參數(shù)的提取器

普通的提取器,相當于是,比如說卸亮,接收一個字符串忽妒,作為參數(shù),然后從字符串里面解析出來多個字段值,然后將多個字段值封裝在一個tuple中,作為Some類型的對象兼贸,返回
現(xiàn)在我們來想一下段直,如果你的類只有一個字段,字符串里面只有一個字段,解析出來的一個字段,是沒有辦法放在tuple中的寝受,因為scala中的tuple坷牛,規(guī)定了,必須要兩個以及兩個以上的值
這個時候很澄,在提取器京闰,unapply方法中,只能將一個字段值甩苛,封裝在Some對象中蹂楣,直接返回

class Person(val name: String)

object Person {
  def unapply(input: String): Option[String] = Some(input)
}

val Person(name) = "leo"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市讯蒲,隨后出現(xiàn)的幾起案子痊土,更是在濱河造成了極大的恐慌,老刑警劉巖墨林,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赁酝,死亡現(xiàn)場離奇詭異犯祠,居然都是意外死亡,警方通過查閱死者的電腦和手機酌呆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門衡载,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隙袁,你說我怎么就攤上這事痰娱。” “怎么了菩收?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵梨睁,是天一觀的道長。 經(jīng)常有香客問我娜饵,道長坡贺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任划咐,我火速辦了婚禮拴念,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘褐缠。我一直安慰自己政鼠,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布队魏。 她就那樣靜靜地躺著公般,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胡桨。 梳的紋絲不亂的頭發(fā)上官帘,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音昧谊,去河邊找鬼刽虹。 笑死,一個胖子當著我的面吹牛呢诬,可吹牛的內(nèi)容都是我干的涌哲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼尚镰,長吁一口氣:“原來是場噩夢啊……” “哼阀圾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狗唉,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤初烘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肾筐,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡哆料,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吗铐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剧劝。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抓歼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拢锹,我是刑警寧澤谣妻,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站卒稳,受9級特大地震影響蹋半,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜充坑,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一减江、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捻爷,春花似錦辈灼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甜紫,卻和暖如春降宅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背囚霸。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工腰根, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拓型。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓额嘿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吨述。 傳聞我的和親對象是個殘疾皇子岩睁,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容