何キーワードタイプとは、次のように書くときのことです。
type
は、Scalaのobject
で定義されているメンバです。
は、クラスとそのコンパニオンオブジェクトがあるとします。
class Foo(a: String)
object Foo {
def apply(a: String) = new Foo
}
は今、あなたが入力としてオブジェクトFoo
を受け入れる方法を書きたいとしよう。そのタイプは何ですか?
あなたはこれが書く場合:
def someMethod(fooObj: Foo) = fooObj.apply("x") // doesn't compile
コンパイルするつもりはありません。 Foo
は、クラスのインスタンスのタイプ(すなわち、new Foo("x")
またはFoo("x")
によって返されるタイプ)を参照します。あなたの具体的な例List.type
で
def someMethod(fooObj: Foo.type) = fooObj.apply("x") // compiles!
List
のコンパニオンオブジェクトのタイプです:オブジェクトは、自分のタイプを参照することができtype
メンバーが持っている理由です。
val listObj: List.type = List
val anEmptyList: List[Int] = listObj.empty[Int] // List()
val aListOfIntegers: List[Int] = listObj.range(1, 4) // List[(1, 2, 3)
そして、どのようにそれを入力するために関連したこのタイプは、例えば特性にフィールドとして定義することができます:ここで私はそれが何を意味するのか明確に願っています例のカップルです。
type
キーワードはタイプメンバーを定義します。 .type
はタイプメンバです。概念的には、Scalaですべてのオブジェクトのようなものです。このようなタイプのメンバーの名前のタイプ、があります。
object Foo {
type type = Foo
}
を明らかにこれはコンパイルされませんが、それはあなたにそれがどのように見えるかもしれないもののアイデアを提供します。
'val x:Int = 1'、' Int'は 'x'の型です。 リテラル( 'Int'や' 'James" 'の' String'には '1'や' 2')を使って特定の型( 'Int'や' String'など)を使うことができます。 型コンストラクタは、他の型を構築する必要がある型です。 'List'または' Option'は、別の型を渡さない限り、完全修飾型ではありません(List [Int]またはOption [String] ' – mfirry