私の意見では、Scalaの最大の利点の1つは、Javaおよびその類似の構文との相互運用性です。私が奇妙だと思ったのは、 Javaで使用される_
演算子の代わりに、パッケージワイルドカードインポートの*
演算子。
_
の代わりに*
を使用する技術的な理由はありますか?そうでない場合、なぜこの変更が行われたのですか?
Scalaでは、*
は有効な識別子です。次のように書くことができます:
val * = "trollin'"
println(*)
結果は次のとおりです。
trollin'
*
という名前のクラスを次のように書くことができます:
class * {
def test():String = {
"trollin'"
}
}
ですから、その場合、パッケージに*
というクラスがあり、us.hexcoder
を書いて、次のように記述します。
import us.hexcoder.*
あなたは*
という名前のクラスをインポートしたいと言っているでしょう。このため、Scalaは、ワイルドカードのインポートを示すために別の記号を使用する必要がありました。何らかの理由で、ワイルドカード記号として_
を使用することにしました。
関数型言語では、_文字は一般に「このパラメーターは気にしない」または「何でもここに入る」と言うために使用されます。その値をネームスペースのインポートに拡張することは意味があります。
Glennの答えに加えて、import
はScalaのどこでも有効なステートメントであり、オブジェクトまたはインスタンスメンバーをスコープにimport
することができます。As *
は明らかに多くのクラスのメンバーであり、import
ステートメントのワイルドカードとして使用することはできません。したがって、有効な識別子であってはならない文字列で終わることになります。
_
頭に浮かぶ。他の場所で別の意味(存在するタイプ、インスタンスとしての機能)に使用されていることも、同じ問題によるものです。
Scalaには、アンダースコアが使用されている 数十の場所 があります。ワイルドカードインポートにそれを使用することは、論理的に重要です。