Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 从不同包的不同类调用函数_Scala_Packages - Fatal编程技术网

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 } }

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

是什么导致了这种行为——我遗漏了什么吗

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 becuause
print
函数将字符串打印到控制台(stdout)不会产生任何结果。它的唯一目的就是产生这种副作用。看看它的定义:好的。p1.ty.f()首先将其流刷新到控制台,然后是p2.ty.f()。我是说在这里