IM尝试理解Scala中的以下高阶函数,但需要对函数的参数进行一些说明。
问题: -
Int => String
函数中的apply
是什么意思?
v: Int
表示参数v的类型为Int
。 [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() + "]"
}
答案 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
函数如何通过副本构造函数。