在scala中调用方法内的函数时出现意外结果

时间:2017-04-25 03:25:41

标签: scala

我开始通过编写简单的代码来学习scala。

我对下面代码的行为感到有些困惑。

class BasicUsage {
  private val incr = (x: Int) =>
    {
      println("incr invoked")
      x + 1
    }
  private val add = (x: Int, y: Int) =>
    {
      println("add invoked")
      if (x == 0 || y == 0) {
        0
      } else {
        x + y
      }
    }

  def testFuns(): Unit =
    println(add(1,2))
    println(incr(5))

}

调用testFuns()时,输出如下,

incr invoked

6

添加已调用的

3

根据我的理解,首先应调用函数add(),然后调用incr()。

上述代码中的错误是什么? 我是否误解了函数和方法的用法?

非常感谢,

1 个答案:

答案 0 :(得分:4)

您在testFuns方法中缺少大括号:

def testFuns(): Unit =
  println(add(1,2))
  println(incr(5))

这意味着testFuns()只包含一个第一个语句:println(add(1,2))。第二个语句属于类,并在BasicUsage实例化后执行。要解决它:

def testFuns(): Unit = {
  println(add(1,2))
  println(incr(5))
}