我有以下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
是什么导致了这种行为 - 我错过了什么?
答案 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()
}
}