调用一个接受String并返回Unit的函数的方法

时间:2018-02-19 08:40:56

标签: scala

我正在尝试编写一个可以采用type(String)=>函数的方法。单元。这似乎不起作用。

  val sayHelloToPerson : (String) => Unit = (s : String) => { println("Hello  " + s) }

如果我打电话

,这是有效的
sayHelloToPerson("Mark")

但是,如果我从下面的方法中调用它

  def executeAnyFunction (f: (String) => Unit) = {
    f()
  }


  executeAnyFunction(sayHelloToPerson("Mark"))

编译器说,

type mismatch, expected: String => Unit, actual: Unit. 

不是(String) => Unit类型的函数本身吗?

3 个答案:

答案 0 :(得分:1)

通过在定义executeAnyFunction时执行此操作,您将调用函数f,而不使用任何参数,因此编译器失败。

你应该做的是返回f,但不调用它(没有括号):

def executeAnyFunction (f: (String) => Unit) = {
        f
}

然后您可以按如下方式使用新功能

  executeAnyFunction(sayHelloToPerson)("Mark")

executeAnyFunction(sayHelloToPerson)f相同,并为其指定参数("Mark")

这里的简单示例:

enter image description here

答案 1 :(得分:0)

因为你用函数的应用叫你第二种方法。

尝试executeAnyFunction(sayHelloToPerson)

并更改正文以将String参数传递给f。 e.g。

def executeAnyFunction (f: (String) => Unit) = {
  f("Mark")
}


executeAnyFunction(sayHelloToPerson)

答案 2 :(得分:0)

也许你的意思是:

def executeAnyFunction(f: (String) => Unit)(s: String) = f(s)

executeAnyFunction(sayHelloToPerson)("Mark")
// prints "Hello  Mark"

这将executeAnyFunction定义为具有两个参数列表的函数:一个具有要执行的函数,另一个具有该函数的输入。

但是,不确定executeAnyFunction除了教育之外还有什么价值。