假设我们有这个函数定义和调用:
def sayHello(prefix:String):(String => String) = {
n => s"$prefix $n"
}
val greeting = sayHello("Hello")
greeting("Gio")
使用Intellij,我看到变量" n" inside函数的类型为String 。
为什么以前未声明的变量被Scala推断为String?
我理解高阶函数会返回一个函数String => String
,但我看不出这两个概念之间的关系。
你可以向我澄清一下吗?
答案 0 :(得分:3)
n
不是变量。这是一个论点(轻微的语义差异)。 n => x
表示法表示接受n并返回x的函数。
由于您将sayHello
的返回值定义为函数String
=> String
,这里唯一可以返回的是一个String
并返回String
的函数。这就是为什么你可以跳过n
的参数类型。根据{{1}}的当前定义,sayHello
只能是n
。
如果你没有定义String
的返回类型,scala会要求你给出sayHello
参数的类型,因为它不可能从函数definiton推断出它: / p>
n
在上面的示例中,def sayHello(prefix:String) = {
n: String => s"$prefix $n"
}
的返回值从其正文推断为sayHello
。