Scala如何以不同的方式推断这两个函数?

Scala如何以不同的方式推断这两个函数?,scala,type-inference,Scala,Type Inference,这包括: def fibonacci():() => Int = { var first = 1 var second = 2 return () => { val oldFirst = first first = second second = second + oldFirst second } } 这

这包括:

 def fibonacci():() => Int = {
        var first   = 1
        var second  = 2
        return () => {
            val oldFirst = first
            first = second
            second = second + oldFirst
            second 
        }
    }
这并不是:

 def fibonacci():() => Int = {
     var first   = 1
     var second  = 2
     return ():Int => {
         val oldFirst = first
         first = second
         second = second + oldFirst
         second 
     }
 }
我显式地试图告诉它我正在返回一个Int,但是我得到了这个错误:
声明的非法开始
,它指向
第一行=第二行。它们有何不同?我正在使用Scala 2.8.1。

return():Int=>{…}
在Scala中不是正确的表达式。如果要显式指定返回类型,则需要将声明放在值之后(该值将是匿名函数):

但是,请注意,没有必要这样做。如果省略
return
,则根本不需要进行任何显式类型声明:

def fibonacci() = {
  var first   = 1
  var second  = 2
  () => {
    val oldFirst = first
    first = second
    second = second + oldFirst
    second 
  }
}
return():Int=>{…}
在Scala中不是正确的表达式。如果要显式指定返回类型,则需要将声明放在值之后(该值将是匿名函数):

但是,请注意,没有必要这样做。如果省略
return
,则根本不需要进行任何显式类型声明:

def fibonacci() = {
  var first   = 1
  var second  = 2
  () => {
    val oldFirst = first
    first = second
    second = second + oldFirst
    second 
  }
}

德比尔斯基是对的。另外两条注释:(1)不需要使用
return
关键字。默认情况下,最后一个表达式将成为返回值。(2) 如果您试图单独注释函数体的类型,这是可能的。代码变为:

def fibonacci2(): () => Int = {
  var first   = 1
  var second  = 2
  () => {
    val oldFirst = first
    first = second
    second = second + oldFirst
    second 
  }: Int
}

德比尔斯基是对的。另外两条注释:(1)不需要使用
return
关键字。默认情况下,最后一个表达式将成为返回值。(2) 如果您试图单独注释函数体的类型,这是可能的。代码变为:

def fibonacci2(): () => Int = {
  var first   = 1
  var second  = 2
  () => {
    val oldFirst = first
    first = second
    second = second + oldFirst
    second 
  }: Int
}