Scala 从不同包的不同类调用函数
我有以下scala文件,Scala 从不同包的不同类调用函数,scala,packages,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 } }
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
是什么导致了这种行为——我遗漏了什么吗
p1.ty.f
不返回任何内容(它实际上返回单位
),因此将此函数的结果与p2.ty.f中“+p1.ty.f中的另一个字符串”连接是没有意义的。因此,将首先执行print(“p1.ty.f”)
,并将打印p1.ty.f
,然后执行println(“在p2.ty.f中,在”+p1.ty.f中)
,并将在p2.ty.f中,在()
中打印,因为()
是单元的字符串表示形式
因此,为了达到预期的结果,您需要编写以下内容:
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()
}
}
我想你漏掉了括号。实际的函数调用看起来是这样的:p1.ty.f()
和ty.f()
我不这么认为,因为在scala中,没有参数的函数可以在没有妄想的情况下调用,如果我错了请纠正我,但是为什么要先执行print(“p1.ty.f”)
@ajduke becuauseprint
函数将字符串打印到控制台(stdout)不会产生任何结果。它的唯一目的就是产生这种副作用。看看它的定义:好的。p1.ty.f()首先将其流刷新到控制台,然后是p2.ty.f()。我是说在这里