我需要把元音转换成@&引用;Scala中的符号

我需要把元音转换成@&引用;Scala中的符号,scala,Scala,这个程序的思想是读入和取出所有元音,并用“@”字符替换它们。输入将随着用户键入“-quit--”而停止,它将返回应用了函数的行。我不知道我包含的函数“lst.map”(“aeiouAEIOU”=>“@”)部分的语法应该是什么。我想我错过了什么 import scala.io.StdIn._ def readList: List[String] = { val n = readLine if (n == "--quit--") { return Nil } else {

这个程序的思想是读入和取出所有元音,并用“@”字符替换它们。输入将随着用户键入“-quit--”而停止,它将返回应用了函数的行。我不知道我包含的函数“lst.map”(“aeiouAEIOU”=>“@”)部分的语法应该是什么。我想我错过了什么

import scala.io.StdIn._

def readList: List[String] = {
  val n = readLine
  if (n == "--quit--") {
    return Nil   
  } else {
    return n::readList
  }
}

def vowelsToAt(lst: List[String]): List[String] = {

  lst.map("aeiouAEIOU" => '@')


}

val wordList = readList
println(vowelsToAt(wordList).mkString("\n"))
您可以使用

lst.map(_.map(c => if ("aeiouAEIOU" contains c) '@' else c))
内部的
map
通过将元音替换为
@
s来逐字符转换字符串,外部的
map
将此转换应用于列表的每个元素

表达式
“aeiouAEIOU”=>“@”
无效,左侧必须是任意字符(lambda的参数),而不是包含要映射的字符的字符串。另一种可能性与您的方法类似(但有点复杂):


一方面注意:在您的方法
readList
中,您不必使用
return
,因为最后一条语句也被解释为返回值。

在您提供的示例中:“lst.map(u.map(c=>if(“aeiouAEIOU”包含c)@'else c”)“c”是什么?它是lambda的参数。表达式
c=>if(“aeiouAEIOU”包含c)@'else c
属于
Char=>Char
类型,因此接受Char
c
(您可以选择任何其他名称),如果
c
是元音或
c
本身,则返回“@”。
list.map(_.map {
  case 'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U' => '@'
  case c => c
})