Scala中的高阶函数

时间:2017-01-29 23:07:56

标签: scala

IM尝试理解Scala中的以下高阶函数,但需要对函数的参数进行一些说明。

问题: -

  1. Int => String函数中的apply是什么意思? v: Int表示参数v的类型为Int
  2. [A](x: A)layout函数中意味着什么?

     object Demo {
       def main(args: Array[String]) {
        println( apply( layout, 10) )
      }
    
       def apply(f: Int => String, v: Int) = f(v)
    
       def layout[A](x: A) = "[" + x.toString() + "]"
    }
    

2 个答案:

答案 0 :(得分:10)

f: Int => String表示f是一个函数,其中一个参数类型为Int,返回类型为String

def layout[A](x: A)表示参数x的类型为A,可以是任何类型。以下是有关如何调用布局的几个示例:

layout[String]("abc") //returns "[abc]"
layout[Int](123)  //returns "[123]"

main运行时,它会使用apply函数和参数10调用layout。这将输出"[10]"

答案 1 :(得分:0)

Int => String的语法意味着传递一个接受Int并返回String的函数。

以下是传递函数的有用示例:

case class Person(name: String, lastName: String)

val person = Person("Johnny", "Cage")

def updateName(name: String) = {
  updatePerson(_.copy(name = name))
}

def updateLastName(lastName: String) {
  updatePerson(_.copy(lastName = lastName))
}

private def updatePerson(transformer: Person => Person): Unit = {
  transformer(person)

}

请注意每个update函数如何通过副本构造函数。