Scala偏函数、执行操作系统命令、提取器unapply方法

1.偏函数

偏函数是PartialFunction[A,B]类的一个实例,其内包含两个方法apply()/isDefineAt(),在某些场景下对需求并不明确,对于明确的部分通过case 表达式指定,不明确部分先保留,在取值时通过isDefineAt()判断是否存在。

object Score extends App {
  val getStudentgrade: PartialFunction[String, Int] = {
    case "joyce" => 90;
    case "cys" => 90;
    case "joe" => 60;
    case _ => "xx";

  }
  getStudentgrade("cys") //90
  getStudentgrade.isDefinedAt("joe") //true 
}

2. scala执行操作系统命令

object Score extends App {
  import sys.process._
  "ls -al" !
  
  import sys.process._
  "python xx.py" !
}

3. 提取器unapply方法

object Score extends App {
//提取器是一个包含了unapply方法的对象,与apply方法相反
//apply方法是接收一些参数,构造出对象,同时省略了使用new关键字
//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)) //Some[(String, String)]
    }
  }
 
  val Person(name, age) = "cys 18"  //默认调用unapply方法,相当于把Some[(String, String)] 赋值Person(name, age)
  println(name, age)
}

4.只有一个参数的提取器

object Score extends App {
  //scala的提取器,接受一个字符串作为参数,解析出多个字段,然后封装在一个tuple中,使用Some返回
  //当参数只有一个时,由于tuple不能只有一个值
  class Person(name:String)
  //apply、unapply是伴生对象的方法
  object Person{
    def unapply(name:String)= Some(name)
  }
  val Person(name) = "cys"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值