2012-04-03 56 views
0

HI我是新的斯卡拉试图运行这段代码:这种类型如何匹配?

class Number(x : Int){ 
     var number = x 

     def inc(): Int = { 
      number => number + 1 
     } 
    } 

但我得到以下错误:solution.scala:12:错误:缺少参数类型 数=>数+ 1 我不知道如何解决这个问题。

+0

请注意,您可以跳过一个中间''x:'class Number(var number:Int){...}' – elbowich 2012-04-04 02:31:46

回答

0

或者干脆:

def inc = (x: Int) => x + 1 

因为诠释返回类型推断,不需要指定它

至于处理问题中的可变性,inc(1),inc(5)等等本身就是传递给类实例的编号的变换表示(即,他们等同于“var number”,但不可改变)。没有真正需要基于我们在这里看到的可变性...

2

本质上讲,你可以expicitly说你期待什么类型:

def inc(): Int = { 
      number: Int => number + 1 
} 

这不会编译,因为你已经定义了什么是函数,所以:

def inc(): (Int) => Int = { 
    // some function that takes Int, calls it `number` and increment 
    number: Int => number + 1 
} 

会更接近,
但是
它没有意义和通知,你定义的那个数字有number类中的变量与 之间没有什么共同之处 - 这就是为什么Scala编译器无法为您推断类型的原因。

我想你想写类似:

def inc(): Int = {number += 1; number;} 
    // will take effect on number field 

def inc(num: Int): Int = num + 1 
+1

我认为它应该是'def inc ()= {number = number + 1;数字}',与* mutable *类型(ick!)似乎是这种情况。 – 2012-04-03 23:43:03

+0

@pst是的,你是对的;) – 2012-04-03 23:46:34

+0

谢谢你们真的帮助:) – 2012-04-03 23:47:46