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"
}