Scala 使用模式匹配的提取器
Scala Extractor被定义为一个对象,它有一个名为unapply的方法作为其一部分。提取器可以在模式匹配中使用。当在模式匹配中比较Extractor的对象时,unapply方法将被自动执行。
下面是带有模式匹配的提取器的例子。
例子 #1 :
// Scala program of extractors
// with pattern matching
// Creating object
object GfG
{
// Main method
def main(args: Array[String])
{
// Assigning value to the
// object
val x = GfG(25)
// Displays output of the
// Apply method
println(x)
// Applying pattern matching
x match
{
// unapply method is called
case GfG(y) => println("The value is: "+y)
case _ => println("Can't be evaluated")
}
}
// Defining apply method
def apply(x: Double) = x / 5
// Defining unapply method
def unapply(z: Double): Option[Double] =
if (z % 5 == 0)
{
Some(z/5)
}
else None
}
输出。
5.0
The value is: 1.0
在上面的例子中,对象名称是GFG,我们使用unapply方法,用匹配表达式应用case类。
例子 #2 :
// Scala program of extractors
// with pattern matching
// Creating object
object GFG
{
// Main method
def main(args: Array[String])
{
val x = GFG(15)
println(x)
x match
{
case GFG(num) => println(x +
" is bigger two times than " + num)
// Unapply is invoked
case _ => println("not calculated")
}
}
def apply(x: Int) = x * 2
def unapply(z: Int): Option[Int] = if (z % 2 == 0)
Some(z/2) else None
}
输出。
30
30 is bigger two times than 15
当使用匹配语句比较一个提取器对象时,unapply方法将被自动执行。
注意: 一个Case类中已经有一个提取器,所以,它可以被自发地使用模式匹配。