过滤器循环内的Scala函数不起作用(类型不匹配)

时间:2019-02-14 15:54:23

标签: scala

我是Scala的新手,我有一个函数(有效)

object Utiles {
  def func(param: String, param2: String): String = {
    // Do Somthing
    true
  }
}

在另一个文件中,我正在成功使用此功能,但是当我将其插入过滤器时,会出现错误

list.filter(value => {
     Utiles.func(value.param ,value.param2)
})

我得到的错误是:

type mismatch;
  found   : String
  required: None.type
             Utiles.func(value.param ,value.param2)

知道我在做什么错吗?

3 个答案:

答案 0 :(得分:4)

您在这里遇到了三个问题(由于该问题是我目前所写的,所以可以看到):

  1. 您的func函数无法编译。您已将函数的返回类型设置为String,但您正在返回Boolean(true)。要么更改返回类型,要么通过返回String结束函数。
  2. .filter(...)要求您做出正确或错误的判断。如果将func的返回类型更改为Boolean,此问题将得到解决。如果您的返回类型是假定String,则需要将该String与某事物进行比较。例如:

    List("foo", "bar").filter(x => func(x) == "baz")
    
  3. 您的类型不匹配错误是因为您似乎正在将String传递到您的func函数中,而该函数期望None.type(出于某种原因)。

我的意思是,您没有给我们Minimal, Complete, and Verifiable example。我已经按照您介绍的代码调试了代码,但是我有一种强烈的感觉,您试图将实际函数缩减到错误(以及函数本身)毫无意义的地步。

答案 1 :(得分:2)

如果您发现filter带有谓词

def filter(p: A => Boolean): List[A]

这意味着您在List[SomeData]上的过滤器功能应为SomeData => Boolean

示例:

scala> def fun(param1: String, param2: String): Boolean = param1 == param2
fun: (param1: String, param2: String)Boolean

scala> List("updupd", "whatwhat").filter(p => fun(p, "updupd"))
res0: List[String] = List(updupd)

答案 2 :(得分:1)

我不确定您如何在其他地方使用func,因为返回类型错误。应该是Boolean

object Utiles {
  def func(param: String, param2: String): Boolean = {
    // Do Somthing
    true
  }
}