0

我有以下 scala 文件,test.scala

package p1 {
    object ty {
       def f() = print ("p1.ty.f")
    }
}

package p2  {
    object ty extends App {
       def f() = println (" in p2.ty.f , in " + p1.ty.f ) 
        // calls above function 
        ty.f
    }
}

当我尝试使用sbt(在命令行上使用 p2.ty)运行上述代码时,它输出以下内容:

p1.ty.f in p2.ty.f , in ()

虽然我期望以下内容:

in p2.ty.f , in  p1.ty.f 

是什么导致了这种行为——我错过了什么吗?

4

1 回答 1

1

p1.ty.f不返回任何东西(它实际上返回Unit),因此将此函数的结果与另一个字符串连接起来没有意义" in p2.ty.f , in " + p1.ty.f。因此,print ("p1.ty.f")将首先执行并打印p1.ty.f,然后println (" in p2.ty.f , in " + p1.ty.f )将执行并打印in p2.ty.f , in (),因为()它是Unit.

因此,要达到预期的结果,您需要编写如下内容:

package p1 {
  object ty {
    def f() = "p1.ty.f"
  }
}

package p2  {
  object ty extends App {
    def f() = println (" in p2.ty.f , in " + p1.ty.f() )
    ty.f()
  }
}
于 2013-05-26T13:50:21.573 回答