2012-01-01 17 views
7

私はパッケージcom.exampleを持っている場合、私はこのようにそのパッケージ内のクラスを作成することができます。クラスの宣言とパッケージオブジェクトの宣言の間には実質的な違いはありますか?

package com.example { 
    class MyClass 
} 

またはこのような:どちらの場合も

package com { 
    package object example { 
    class MyClass 
    } 
} 

、結果のクラスは限り(あります他のScalaコードについては、少なくともcom.example.MyClassです)。

確かに偶然の違いがあります。最初の例では、コンパイルされたクラスはcom/example/MyClass.classですが、2番目のクラスはcom/example/package$MyClass.classですが、実際の違いはありますか?私は考えることができる

答えて

5

生成されたクラスファイル名の相違点はscala-internalsで議論されており、Scala 2.10では消えてしまうことでしょう。

+0

そのため、完全性のために、「実質的な差異はありますか?」という質問に対する答えは「いいえ」ですか? 2.10で偶然の違いが消えてしまいますか?ありがとう! –

+0

正しい。パッケージオブジェクトはさらに進化するかもしれない機能です:ここで何が来るかを見てください:http://www.scala-lang.org/docu/files/packageobjects/ packageobjects.html – retronym

0

唯一の理由ではなくパッケージにのみclass ES、object Sまたはtype Sを置くことができるという、あなたはオブジェクトにdef秒、val sおよびvar Sを置くことができるということです

+0

はい - これはパッケージオブジェクトのポイントだと私は認識しています。しかし、それは私が求めている質問ではありません。問題は、私がパッケージオブジェクトにクラスを置くと、実際にそれを定義することとは実質的に異なるということです。 –

関連する問題