Scala新手。如果列表的第一个字符匹配,请尝试检查函数。
def checkFistChar(chars: List[Char]): Boolean =
if (chars.head == "3") true
else false
在条件行中我得到Comparing unrelated types
和
checkFistChar("3 is larger than 2".toList)
返回false
答案 0 :(得分:4)
值"3"
是String
,因为您使用的是双引号,而不是Char
。您需要使用单引号。此外,您不需要if / else:
def checkFirstChar(chars : List[Char]) = chars.head == '3'
你的函数的另一个问题是在空列表上调用head
会抛出异常。一般情况下,您应该只使用headOption
来返回Option
:
//empty list returns false
def safeCheckFirstChar(chars : List[Char]) : Boolean =
chars
.headOption
.map(_ == '3')
.getOrElse(false)
这相当于Tzach& amp;&克里斯'评论中的建议以及模式匹配:
def safeCheckFirstChar2(chars : List[Char]) =
chars
.headOption
.exists(_ == '3')
def safeCheckFirstChar3(chars : List[Char]) =
chars.headOption == Some('3')
def safeCheckFirstChar4(chars : List[Char]) = chars.headOption match {
case Some('3') => true
case _ => false
}
答案 1 :(得分:3)
您可以直接在chars
列表上进行模式匹配:
def checkFistChar(chars: List[Char]): Boolean =
chars match {
case '3' :: _ => true
case _ => false
}
您可以进一步概括checkFistChar
:
def checkFistChar(ch: Char, chars: List[Char]): Boolean =
chars match {
case `ch` :: _ => true
case _ => false
}
此实施将检查提供的ch
是chars
的负责人。
checkFistChar('3', Nil) should be(false)
checkFistChar('3', List('3')) should be(true)
checkFistChar('3', List('4')) should be(false)
checkFistChar('3', List('3', '4')) should be(true)