如何在Scala中为for comprehension返回String?

Von*_*onn 0 scala

Scala新手警报:

基本上我正在尝试做这样的事情:我模式匹配并返回一个字符串.

scala> def processList(list: List[String], m: String): String={list foreach (x=> m match{
 | case "test" => "we got test"                                                      
 | case "test1"=> "we got test1"})}                                                  
Run Code Online (Sandbox Code Playgroud)

:10:错误:类型不匹配; found:需要的单位:String def processList(list:List [String],m:String):String = {list foreach(x => m match {

我知道我可以设置一个var并在for comp之后返回它...但这似乎不是Scala方式.

Arj*_*ijl 9

我不完全清楚你要做的究竟是什么.您是否只想测试列表中是否存在某个元素?或者您想要返回一些带有转换的字符串列表?例如,后者可以这样写:


scala> def processList(l: List[String]): List[String] = l map {s => s match {
       case "test" => "we got test"
       case "test1" => "we got test1"
       case _ => "we got something else"
     }
 }
scala> processList(List("test", "test1", "test2", "test3"))
res: List[String] = List(we got test, we got test1, we got something else, we got something else)
Run Code Online (Sandbox Code Playgroud)

对于前者,你可以这样写:


scala> def exists(l: List[String], m: String): String = {
    if (l exists (s => s == m))
    m + " exists"
    else 
    m + " does not exist"
}
exists: (l: List[String],m: String)String

scala> val l = List("test1", "test2", "test3")
l: List[java.lang.String] = List(test1, test2, test3)

scala> exists(l, "test1")
res0: String = test1 exists

scala> exists(l, "test2")
res1: String = test2 exists

scala> exists(l, "test8")
res2: String = test8 does not exist
Run Code Online (Sandbox Code Playgroud)

在任何情况下:List上的foreach方法遍历列表中的每个元素,将给定的函数应用于每个元素.它主要用于副作用,例如将某些内容打印到控制台或写入文件.传递给foreach方法的函数必须返回Unit类型,就像Java中的void一样.因此,您无法从中返回单个String.