在 Scala 中使用具有模式匹配的提取器
Scala Extractor 被定义为一个对象,它有一个名为 unapply 的方法作为它的一部分。提取器可用于模式匹配。 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 方法并应用带有匹配表达式的案例类。
示例 #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
使用 match 语句比较提取器对象时,将自动执行 unapply 方法。
注意: Case 类中已经有一个 Extractor,因此它可以与 Pattern Matching 一起使用。