我正在尝试在Scala中编译简单的helloworld,并得到错误“scala:value capitalize不是Char的成员”为什么编译器认为newW是Char?
val dict = Map(
"hello" -> "olleh",
"world" -> "dlrow"
)
def translate(input: String): String = {
input.split( """\s+""").map(w => dict.getOrElse(w.toLowerCase, w).map(newW =>
(if (w(0).isUpper) newW.capitalize else newW))
).mkString(" ")
}
2 回答
在
translate
中对map
的第二次调用是从dict.getOrElse(...)
返回的值的映射,其类型为String
,可以隐式地将其视为Iterable[Char]
. 因此,编译器正确地推断出newW
的类型为Char
并且当您尝试在其上调用capitalize
时抱怨 . 你可能正在寻找类似的东西Update: 顺便说一句,如果
input
是一个空字符串,它将在运行时失败 - 它至少需要再检查一次安全性 .这是发生了什么: