比较scala中的==字符

can*_*his 8 scala

我正在努力教自己一些scala.我被困在一些似乎武断的东西.我想比较天气两个字符是否相等.

真实的例子

这些按预期返回true

"(" == "(" 
"(".equals("(")
Run Code Online (Sandbox Code Playgroud)

我要检查什么

"(an exampl(e))".toList(0)      // res : Char = (
Run Code Online (Sandbox Code Playgroud)

不知何故是假的

这些返回false

"(an exampl(e))".toList(0).equals("(")
"(an exampl(e))".toList(0) == "("   
"(an exampl(e))".toList.head == "("  
Run Code Online (Sandbox Code Playgroud)

我想我在这里遗漏了一些东西.我是否将字符值与列表指针进行比较?如果是这样,我如何检查我指向的项目的值是否等于"("

lpi*_*ora 26

简短的回答是你应该与')'而不是")"进行比较.")"的类型String不是Char.

使用REPL,您可以轻松地测试它(注意类型).

scala> ')'
res0: Char = )

scala> ")"
res1: String = )
Run Code Online (Sandbox Code Playgroud)

equals方法的定义或多或少与此类似equals(obj: Any): Boolean,因此代码编译与您作为参数传递给它的引用无关.但是检查是false,因为类型不一样.

顺便说一句,我认为更好的方式是写你的测试是这样的(不.toList.head被定义StringOps为好):

scala> "(an exampl(e))".head == '('
res2: Boolean = true
Run Code Online (Sandbox Code Playgroud)