dz̸ScalaģʽƥÅä

 ¸üÐÂʱ¼ä£º2020Äê06ÔÂ29ÈÕ 11:04:20   ×÷ÕߣºzzzzMing  
ÕâƪÎÄÕÂÖ÷Òª½éÉÜÁËScalaģʽƥÅäµÄµÄÏà¹Ø×ÊÁÏ£¬ÎÄÖн²½â·Ç³£Ïêϸ£¬´úÂë°ïÖú´ó¼Ò¸üºÃµÄÀí½âºÍѧϰ£¬¸ÐÐËȤµÄÅóÓÑ¿ÉÒÔÁ˽âÏÂ
£¨¸£ÀûÍƼö£º¡¾ÌÚѶÔÆ¡¿·þÎñÆ÷×îÐÂÏÞʱÓŻݻ£¬ÔÆ·þÎñÆ÷1ºË2G½ö99Ôª/Äê¡¢2ºË4G½ö768Ôª/3Ä꣬Á¢¼´ÇÀ¹º>>>£º9i0i.cn/qcloud£©

£¨¸£ÀûÍƼö£ºÄ㻹ÔÚÔ­¼Û¹ºÂò°¢ÀïÔÆ·þÎñÆ÷£¿ÏÖÔÚ°¢ÀïÔÆ0.8ÕÛÏÞʱÇÀ¹º»î¶¯À´À²£¡4ºË8GÆóÒµÔÆ·þÎñÆ÷½ö2998Ôª/3Ä꣬Á¢¼´ÇÀ¹º>>>£º9i0i.cn/aliyun£©

Ò».scalaģʽƥÅ䣨pattern matching£©

pattern matching¿ÉÒÔ˵ÊÇscalaÖÐÊ®·ÖÇ¿´óµÄÒ»¸öÓïÑÔÌØÐÔ£¬µ±È»Õâ²»ÊÇscala¶ÀÓеģ¬µ«Õâ²»·Á°­Ëü³ÉΪscalaµÄÓïÑÔµÄÒ»´óÀûÆ÷¡£

scalaµÄpattern matchingÊÇÀàËÆÕâÑùµÄ£¬

e match {
 case Pattern1 => do Something
 case Pattern2 if-clause => do others
 ...
}

ÆäÖУ¬±äÁ¿eºóÃæ½ÓÒ»¸ömatchÒÔ¼°Ò»¸ö´úÂë¿é£¬ÆäÖÐÿ¸öcase¶ÔÓ¦Ò»ÖÖ¿ÉÄÜ»ØÆ¥ÅäµÄÀàÐÍ£¬Èç¹ûÆ¥Åä³É¹¦ÔòÖ´ÐÐ=>ºóÃæµÄ´úÂë¡£

ÎÒÃÇ¿ÉÒÔÓÃÒ»¸ö¾ßÌåһЩµÄÀý×ÓÀ´¿´¿´Ä£Ê½Æ¥ÅäÊÇÔõô¹¤×÷µÄ£º

case class Player(name: String, score: Int)
def printMessage(player: Player) = player match {
 case Player(_, score) if score > 100000 =>
  println("Get a job, dude!")
 case Player(name, _) =>
  println("Hey, $name, nice to see you again!")
}

¿´ÆðÀ´ÓеãÀàËÆÓÚÆäËûÓïÑÔµÄswitch£¬µ«Æäʵ»¹ÊÇÓкܴóµÄ²»Í¬µÄ¡£

ÒÔjavaµÄswitchΪÀý£¬javaµÄswitch½ö½ö»á×öһЩ»ù±¾ÀàÐ͵ÄÆ¥Å䣬ȻºóÖ´ÐÐһЩ¶¯×÷£¬²¢ÇÒÊÇûÓзµ»ØÖµµÄ¡£

¶øscalaµÄpattern matching matchÔòҪǿ´óµÃ¶à£¬³ýÁË¿ÉÒÔÆ¥ÅäÊýÖµ£¬Í¬Ê±Ëü»¹ÄÜÆ¥ÅäÀàÐÍ¡£

def parseArgument(arg: String) = arg match {
  //Æ¥ÅäÖµ
  case "-h" | "--help" => displayHelp
  case "-v" | "--version" => displayVerion
  case whatever => unknownArgument(whatever)
}
def f(x: Any): String = x match {
  //Æ¥ÅäÀàÐÍ
  case i:Int => "integer: " + i
  case _:Double => "a double"
  case s:String => "I want to say " + s
}

ͬʱpattern matchingÊÇÓзµ»ØÖµµÄ£¬±ÈÈçÉÏÃæµÄmatch£¬Ëü·µ»ØµÄ¾ÍÊÇÒ»¸öUnit¡£ÎÒÃÇÒ²¿ÉÒÔÐÞ¸ÄÉÏÃæµÄ´úÂëÈÃËü·µ»ØÒ»¸ö×Ö·û´®£º

case class Player(name: String, score: Int)
def message(player: Player) = player match {
 case Player(_, score) if score > 100000 =>
  "Get a job, dude!"
 case Player(name, _) =>
  "Hey, $name, nice to see you again!"
}

ÖµµÃÒ»ÌáµÄÊÇ£¬pattern matching ·µ»ØÖµÊÇÓɵÚÒ»¸öÆ¥ÅäµÄģʽÖеĴúÂë¿é¾ö¶¨µÄ¡£

¶þ. ΪʲôҪÓÃpattern matching

¿´µ½ÕâÀïÄã»á·¢ÏÖÒ»¸öÎÊÌ⣬pattern matching²»ÊǺÍif else²î²»¶àÂð£¿ÄÇΪʲô»¹ÒªÊ¹ÓÃpattern matchingÄØ£¿

Ê×ÏÈÎÒÃÇÐèÒªÃ÷°×£¬Ä£Ê½Æ¥ÅäÆäʵ±¾ÖÊÉÏÊÇÌṩһ¸ö·½±ãµÄ½â¹¹(Destructuring)Êý¾Ý½á¹¹µÄ·½Ê½£¬ÒÔscalaΪÀý£¬pattern matchingÆäʵÓõ½ÁËscalaÖÐÌáÈ¡Æ÷µÄ¹¦ÄÜ£¬ÌáÈ¡Æ÷Æäʵ¾ÍÊÇÀàÖеÄunapply()·½·¨¡£

trait User {
 def name: String
}
class FreeUser(val name: String) extends User
object FreeUser {
 //ÌáÈ¡Æ÷
 def unapply(user: FreeUser): Option[String] = Some(user.name)
}
 val user: User = new FreeUser("Daniel")
 user match {
  case FreeUser(name) => println("it match here" + name)
  case _ => println("not me")
 }

Ã÷°×ÁËģʽƥÅäµÄ±¾ÖÊÄã¾Í»áÖ±µ½£¬Æäʵif elseÖ»ÊÇpattern matchingÖеÄÒ»¸öµäÐ͵ÄÓ÷¨£¬µ«²¢·ÇËüµÄÈ«²¿¡£

ͬʱ£¬pattern matchingÔÊÐíÄã½âñîÁ½¸ö²¢²»ÕæÕýÊôÓڱ˴˵Ķ«Î÷£¬Ò²Ê¹µÃÄãµÄ´úÂë¸üÒ×ÓÚ²âÊÔ¡£±ÈÈçÉÏÃæµÄmatch²¿·ÖµÄ´úÂëÎÒÃÇ¿ÉÒÔд³ÉÏÂÃæÕâÑù£º

 val user: User = new FreeUser("Daniel")
 //½«·µ»Ø½á¹û´æÔÚÒ»¸ö³£Á¿ÖÐ
 val message = user match {
  case FreeUser(name) => "it match here" + name
  case _ => "not me"
 }
 //¿ÉÒÔËæÒâʹÓøó£Á¿£¬ÊµÏÖ½âñî
 println(message)

ÕâÑù»á¸³Óè´úÂë¸ü¶àµÄÁé»îÐÔ£¬Í¬Ê±Ò²¸ü¼Ó·½±ã×ö½øÒ»²½²Ù×÷¡£

¶øÒԿɶÁÐԵĽǶÈÀ´Ëµ£¬Ê¹ÓÃÒ»´ó¶ÑµÄif else´úÂëÎÞÒÉÊDZȽÏÄÑ¿´µÄ£¬¶øÈç¹ûʹÓÃpattern matchingµÄ»°£¬´úÂë»á¼ò½àÇåÎúºÜ¶à£¬¶ø¼ò½àµÄ´úÂëÔò»á¸üÈÝÒ×ÔĶÁ¡£

ÒÔÉϾÍÊÇdz̸ScalaģʽƥÅäµÄÏêϸÄÚÈÝ£¬¸ü¶à¹ØÓÚscalaģʽƥÅäµÄ×ÊÁÏÇë¹Ø×¢³ÌÐòÔ±Ö®¼ÒÆäËüÏà¹ØÎÄÕ£¡

Ïà¹ØÎÄÕÂ

  • »ã±àÓÅ»¯Ìáʾ

    »ã±àÓÅ»¯Ìáʾ

    Êî¼ÙÃéÁËһЩ»ã±àÓÅ»¯µÄÎÄÕ£¬¸Ð¾õÕâƪÓеãÒâ˼¡£¾¡¹ÜÓ¢ÎÄˮƽ²»Õ¦µØ£¬»¹ÊǾóÆðÅ£¾¢·­ÒëÁËÏ¡£¿Ï¶¨Óв»ºÃµÄµØ·½£¬´ó¼Òº£º­~Ó¢ÎÄÔ­Îĸ½¼þ¸ø³ö~Èç¹ûÓÐʲô´íÎó»¹ÍûÅúÆÀÖ¸Õý~ÁíÍ⣬Èç¹ûadmin¸Ð¾õ¿ÉÒÔ¼Ó¾«µÄ»°¾ÍÂé·³ÏÂÁË
    2012-07-07
  • ³õ²½Á˽â´úÀíºÍ¸ºÔؾùºâ

    ³õ²½Á˽â´úÀíºÍ¸ºÔؾùºâ

    ±¾ÎÄÖ÷Òª³õ²½´øÄãÁ˽â´úÀíºÍ¸ºÔؾùºâµÄ֪ʶ£¬ÎÄÖжÔÕýÏò¡¢·´Ïò´úÀíÒÔ¼°·´Ïò´úÀíÓ븺ÔؾùºâµÄ¹ØϵµÈ×öÁËÏêϸ½²½â£¬¸ÐÐËȤµÄÅóÓÑ¿ÉÒԲο¼Ò»ÏÂÕâƪÎÄÕÂ
    2021-09-09
  • Ò»¸öÄÜÉú³É¾«ÃÀ´úÂëͼƬµÄ¹¤¾ßCarbon!Èÿ´´úÂë³ÉΪһÖÖÏíÊÜ

    Ò»¸öÄÜÉú³É¾«ÃÀ´úÂëͼƬµÄ¹¤¾ßCarbon!Èÿ´´úÂë³ÉΪһÖÖÏíÊÜ

    µ±ÎÒÃÇÏëչʾ×Ô¼ºÐ´µÄ´úÂë¸ø±ðÈË¿´µÄʱºò,Ï£ÍûÈôúÂë±£³ÖÔ­Óеĸñʽ,²¢ÇÒÒªÃÀ¹ÛÒ»µã,ÓÐÒ»¸öÇ¿´óµÄÔÚÏß¹¤¾ß¿ÉÒÔ°ïÖúÎÒÃÇʵÏÖ,¶øÇÒÖ§³Ö¶àÖÖÖ÷Ìâ,Ëû¾ÍÊÇCarbon,ÐèÒªµÄÅóÓÑ¿ÉÒԲο¼ÏÂ
    2021-05-05
  • ÈçºÎÀí½âÈí¼þϵͳµÄ¸ß²¢·¢

    ÈçºÎÀí½âÈí¼þϵͳµÄ¸ß²¢·¢

    ±¾ÎĽéÉܸ߲¢·¢ÏµÍ³µÄ¶ÈÁ¿Ö¸±ê£¬½²Êö¸ß²¢·¢ÏµÍ³µÄÉè¼Æ˼·£¬ÔÙÊáÀí¸ß²¢·¢µÄ¹Ø¼ü¼¼Êõ£¬×îºó½áºÏ×÷Õߵľ­Ñé×öһЩÑÓÉì̽ÌÖ¡£
    2021-05-05
  • µÑ¿¨¶û³Ë»ý½éÉÜ

    µÑ¿¨¶û³Ë»ý½éÉÜ

    µÑ¿¨¶û£¨Descartes£©³Ë»ýÓÖ½ÐÖ±»ý¡£¼ÙÉ輯ºÏA={a,b}£¬¼¯ºÏB={0,1,2}£¬ÔòÁ½¸ö¼¯ºÏµÄµÑ¿¨¶û»ýΪ{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}
    2013-05-05
  • K8S¶þ½øÖƲ¿ÊðµÄK8S(1.15)²¿Êðhpa¹¦ÄÜ

    K8S¶þ½øÖƲ¿ÊðµÄK8S(1.15)²¿Êðhpa¹¦ÄÜ

    ÕâƪÎÄÕÂÖ÷Òª½éÉÜÁËK8S¶þ½øÖƲ¿ÊðµÄK8S(1.15)²¿Êðhpa¹¦ÄÜ,±¾Îĸø´ó¼Ò½éÉܵķdz£Ïêϸ£¬¶Ô´ó¼ÒµÄѧϰ»ò¹¤×÷¾ßÓÐÒ»¶¨µÄ²Î¿¼½è¼ø¼ÛÖµ£¬ÐèÒªµÄÅóÓÑ¿ÉÒԲο¼ÏÂ
    2021-04-04
  • Èí¼þ²âÊÔ¹ý³ÌÖг£¼ûµÄÓ¢Îĵ¥´Ê»ã×Ü

    Èí¼þ²âÊÔ¹ý³ÌÖг£¼ûµÄÓ¢Îĵ¥´Ê»ã×Ü

    ÕâƪÎÄÕÂÖ÷Òª½éÉÜÁËÈí¼þ²âÊÔ¹ý³ÌÖг£¼ûµÄÓ¢Îĵ¥´Ê»ã×Ü,ÐèÒªµÄÅóÓÑ¿ÉÒԲο¼ÏÂ
    2022-09-09
  • Ïê½âwindows »·¾³Ï´electricSearch+kibana

    Ïê½âwindows »·¾³Ï´electricSearch+kibana

    ÕâƪÎÄÕÂÖ÷Òª½éÉÜÁËwindows »·¾³Ï´electricSearch+kibana,±¾Îĸø´ó¼Ò½éÉܵķdz£Ïêϸ£¬¶Ô´ó¼ÒµÄѧϰ»ò¹¤×÷¾ßÓÐÒ»¶¨µÄ²Î¿¼½è¼ø¼ÛÖµ£¬ÐèÒªµÄÅóÓÑ¿ÉÒԲο¼ÏÂ
    2021-05-05
  • 8¸ö»ùÓÚLuceneµÄ¿ªÔ´ËÑË÷ÒýÇæ(ÍƼö)

    8¸ö»ùÓÚLuceneµÄ¿ªÔ´ËÑË÷ÒýÇæ(ÍƼö)

    LuceneÊÇÒ»ÖÖ¹¦ÄÜÇ¿´óÇÒ±»¹ã·ºÊ¹ÓõÄËÑË÷ÒýÇ棬ÒÔÏÂÁгö8ÖÖ»ùÓÚLuceneµÄËÑË÷ÒýÇ棬Äã¿ÉÒÔÏëÏóËûÃÇÓжàôǿ´ó
    2017-04-04
  • Ïê½âÌáÉý³¡¾°Îı¾Ê¶±ðÖеÄÓïÑÔÄ£ÐÍ

    Ïê½âÌáÉý³¡¾°Îı¾Ê¶±ðÖеÄÓïÑÔÄ£ÐÍ

    ÓïÑÔÄ£Ðͼ´¸ù¾Ýµ±Ç°Óï¾³µÄÉÏÏÂÎÄÍƶϵ±Ç°¾ä×ÓµÄÒâ˼¡£Îı¾Í¼ÏñÖаüº¬Á½²ãÐÅÏ¢£ºÊÓ¾õÎÆÀíÐÅÏ¢ºÍÓïÑÔÐÅÏ¢¡£ÓÉÓÚµ¥´¿¸ù¾ÝÊÓ¾õÎÆÀíÐÅÏ¢½øÐÐÎÄ×Öʶ±ðȱÉÙÁ˶ÔÉÏÏÂÎĵÄ×Ö·ûÓïÒåÐÅÏ¢µÄÍÚ¾ò£¬Ê±³£»áµ¼Ö´íÎóµÄÎı¾Ê¶±ð½á¹û£¨Ö®ºó»áÏêϸ˵Ã÷£©¡£
    2021-05-05

×îÐÂÆÀÂÛ


http://www.vxiaotou.com