使用列表[Char]。Scala中的头

使用列表[Char]。Scala中的头,scala,Scala,这里是Scala的新成员。尝试使用函数检查列表的第一个字符是否匹配 def checkFistChar(chars: List[Char]): Boolean = if (chars.head == "3") true else false 在条件行中,我比较了不相关的类型和 checkFistChar3大于2。toList返回false值3是一个字符串,因为您使用的是双引号,而不是字符。您需要使用单引号。此外,您不需要if/else: def checkFirstChar(chars

这里是Scala的新成员。尝试使用函数检查列表的第一个字符是否匹配

def checkFistChar(chars: List[Char]): Boolean =
  if (chars.head == "3") true
  else false
在条件行中,我比较了不相关的类型和

checkFistChar3大于2。toList返回false

值3是一个字符串,因为您使用的是双引号,而不是字符。您需要使用单引号。此外,您不需要if/else:

def checkFirstChar(chars : List[Char]) = chars.head == '3'
函数的另一个问题是,在空列表上调用head会引发异常。通常,您应该只使用headOption,它返回一个选项:

这相当于Tzach和Chris在评论和模式匹配中的建议:

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
}
值3是字符串,因为您使用的是双引号,而不是字符。您需要使用单引号。此外,您不需要if/else:

def checkFirstChar(chars : List[Char]) = chars.head == '3'
函数的另一个问题是,在空列表上调用head会引发异常。通常,您应该只使用headOption,它返回一个选项:

这相当于Tzach和Chris在评论和模式匹配中的建议:

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
}
您可以直接在字符列表上进行模式匹配:

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是否为CHAR的负责人

您可以直接在字符列表上进行模式匹配:

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是否为CHAR的负责人


.map_==“3”。getOrElsefalse可以缩短为.exists_==“3”。我正在考虑用chars.isEmpty处理空列表。我还看到您将“3”作为字符串进行检查。你的实现是如何将字符串转换成字符的?哦,明白了,这是双引号。谢谢@mosmic我强烈推荐scala新手指南,它是关于以下主题的一个很好的介绍性讨论:其他选项:chars.headOption.contains'3',chars.headOption==Some'3'。map='3'。我还看到您将“3”作为字符串进行检查。你的实现是如何将字符串转换成字符的?哦,明白了,这是双引号。谢谢@mosmic我强烈推荐scala新手指南,它是关于这些主题的一个很好的介绍性讨论:其他选项:chars.headOption.contains'3',chars.headOption==比较不相关类型时得到的一些'3',这就是编译器非常清楚问题是什么,然后解释答案。我不知道你用的是什么IDE,但你可能应该学会如何使用它来判断什么是类型。你可以比较不相关的类型,这就是编译器非常清楚问题所在,然后解释答案。我不知道您使用的是什么IDE,但您可能应该学习如何使用它来判断某个东西是什么类型的。