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 に答える