匹配方程式案例的 Scala 模式
Scala pattern matching an equation case
如果 x
可以被 y
整除,我想进行模式匹配,return 是的,但我似乎语法错误并且一直崩溃。
def isDivisible (x: Int, y: Int) :Boolean = Int match {
case (x % y == 0) => true
case _ => false
}
isDivisible(10, 5)
将方程式作为案例的正确方法是什么
在这样一个简单的例子中使用模式匹配有点矫枉过正,只需定义:
def isDivisible(x: Int, y: Int): Boolean = x % y == 0
扩展其中一条评论,为了直接解决您的问题,您需要按如下方式进行模式匹配:
def isDivisible(x: Int, y: Int): Boolean = (x, y) match {
case (a, b) if a % b == 0 => true
case _ => false
}
isDivisible(10, 5)
您需要对单个值进行模式匹配,因此我们首先需要将 x
和 y
包装成一个 元组 :(x, y)
.
第一个 case
语句然后需要从 元组 中提取值,并且有一个 if
子句来确定第一个值(a
,映射到 x
的值)可以被第二个值(b
,映射到 y
的值)整除。
如果 if
子句成功,则函数将 return true
;否则,它将 return false
.
显然,在这种特殊情况下使用模式匹配在编码和执行资源方面效率低下。这是因为将参数包装到一个元组中,然后对一个元组进行模式匹配并再次将其分开,是完全多余的。我们可以直接用 if
语句替换它:
def isDivisible(x: Int, y: Int): Boolean = if(x % y == 0) true else false
isDivisible(10, 5)
然而,由于if
语句中条件的值映射到相同的结果,这也是多余的,我们可以将if
替换为条件:
def isDivisible(x: Int, y: Int): Boolean = x % y == 0
isDivisible(10, 5)
或者,您可以对模数计算的结果进行模式匹配:
def isDivisible(x: Int, y: Int): Boolean = x % y match {
case 0 => true
case _ => false
}
isDivisible(10, 5)
但是请注意,如果 y
为 0,则此函数的所有上述版本都将失败并返回 ArithmeticException
。您可以使用模式匹配来处理这种情况:
def isDivisible(x: Int, y: Int): Boolean = y match {
case 0 => false // Treat division by zero as indivisible.
case _ => x % y == 0
}
isDivisible(10, 0)
如果 x
可以被 y
整除,我想进行模式匹配,return 是的,但我似乎语法错误并且一直崩溃。
def isDivisible (x: Int, y: Int) :Boolean = Int match {
case (x % y == 0) => true
case _ => false
}
isDivisible(10, 5)
将方程式作为案例的正确方法是什么
在这样一个简单的例子中使用模式匹配有点矫枉过正,只需定义:
def isDivisible(x: Int, y: Int): Boolean = x % y == 0
扩展其中一条评论,为了直接解决您的问题,您需要按如下方式进行模式匹配:
def isDivisible(x: Int, y: Int): Boolean = (x, y) match {
case (a, b) if a % b == 0 => true
case _ => false
}
isDivisible(10, 5)
您需要对单个值进行模式匹配,因此我们首先需要将 x
和 y
包装成一个 元组 :(x, y)
.
第一个 case
语句然后需要从 元组 中提取值,并且有一个 if
子句来确定第一个值(a
,映射到 x
的值)可以被第二个值(b
,映射到 y
的值)整除。
如果 if
子句成功,则函数将 return true
;否则,它将 return false
.
显然,在这种特殊情况下使用模式匹配在编码和执行资源方面效率低下。这是因为将参数包装到一个元组中,然后对一个元组进行模式匹配并再次将其分开,是完全多余的。我们可以直接用 if
语句替换它:
def isDivisible(x: Int, y: Int): Boolean = if(x % y == 0) true else false
isDivisible(10, 5)
然而,由于if
语句中条件的值映射到相同的结果,这也是多余的,我们可以将if
替换为条件:
def isDivisible(x: Int, y: Int): Boolean = x % y == 0
isDivisible(10, 5)
或者,您可以对模数计算的结果进行模式匹配:
def isDivisible(x: Int, y: Int): Boolean = x % y match {
case 0 => true
case _ => false
}
isDivisible(10, 5)
但是请注意,如果 y
为 0,则此函数的所有上述版本都将失败并返回 ArithmeticException
。您可以使用模式匹配来处理这种情况:
def isDivisible(x: Int, y: Int): Boolean = y match {
case 0 => false // Treat division by zero as indivisible.
case _ => x % y == 0
}
isDivisible(10, 0)