我已经看过你可以使用模式匹配对List进行一系列不同的匹配。是否可以使用模式匹配来识别列表中的任何(理想情况下)元素是否包含值x?所以像这样:
def contains(text: List[Char], chr: Char): Boolean = text match{
case *pattern matching chr to any value in text* => true
case _ => false
}
只是想了解它能做什么,不能做什么。
(我知道我可以使用text.contains(chr),BTW)
谢谢, 彼得
答案 0 :(得分:1)
我所看到的是使用列表上的匹配来递归,在你的情况下可能是这样的:
def contains(text: List[Char], chr: Char): Boolean = text match{
case head :: tail => head.equals(chr) || contains(tail, chr)
case Nil => false
}
我认为你不能使用匹配来执行这种操作,因为列表的unapply
方法是如何定义的,理论上如果你知道列表的长度你可以编写像
case x1 :: x2 :: x3 // and so on
但我想你可以自己看出这对于参数匹配来说不实用也不理想。
答案 1 :(得分:1)
不确定您是否正在寻找,但您可以将if
表达式放在模式匹配中。
此代码看似人为,但它演示了如何将contains
或其他随机函数放入模式匹配中。
scala> def contains(text: List[Char], chr: Char): Boolean = text match{
| case _ if text.contains(chr) => true
| case _ => false
| }
contains: (text: List[Char], chr: Char)Boolean
scala> contains(List('a', 'b', 'c'), 'd')
res2: Boolean = false
scala> contains(List('a', 'b', 'c'), 'c')
res3: Boolean = true