从不同的包中调用来自不同类的函数

时间:2013-05-26 13:41:36

标签: scala packages

我有以下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 

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

1 个答案:

答案 0 :(得分: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()
  }
}