Scala では、数値や関数を含むすべての値に型があります。次の図は、型階層のサブセットを示しています。
Any
型はすべての型の親型であり、トップレベルの型とも呼ばれます。 equals
、hashCode
、toString
などのいくつかの一般的なメソッドを定義します。 Any
には、AnyVal
と AnyRef
という 2 つの直接サブクラスがあります。 Any
类型是所有类型的父类型,也称为顶级类型。它定义了一些通用的方法,如 equals
、hashCode
和 toString
。Any
有两个直接子类:AnyVal
和 AnyRef
。
AnyVal
代表值类型。有9种预定义的值类型,它们是不可为空的:Double
、Float
、Long
、Int
、Short
、Byte
、Char
、Unit
和 Boolean
。Unit
是一个不具备任何意义的值类型。Unit
只有一个实例可以像这样声明:()
。所有函数都必须返回某个值,因此 Unit
是一个有用的返回类型。
AnyRef
表示引用类型。所有的非值类型都被定义为引用类型。Scala中的每个用户定义类型都是 AnyRef
的子类型。如果Scala是在Java运行时环境中使用的,那么 AnyRef
对应于 Java.lang.object
。
这里有一个例子,它演示了字符串、整数、字符、布尔值和函数都是与其他对象一样的对象:
val list: List[Any] = List( "a string", 732, // an integer 'c', // a character true, // a boolean value () => "an anonymous function returning a string" ) list.foreach(element => println(element))
它定义了类型 List[Any]
的变量列表。这个列表是用各种类型的元素初始化的,但是它们都是 scala.Any
的实例,所以你可以把它们都添加到列表中。
下面是程序的输出:
a string 732 c true <function>
值类型可以通过以下方式进行转换:
例如:
val x: Long = 987654321 val y: Float = x // 9.8765434E8 (note that some precision is lost in this case) val face: Char = '☺' val number: Int = face // 9786
转换是单向的。下面最后一条语句将无法通过编译:
val x: Long = 987654321 val y: Float = x // 9.8765434E8 val z: Long = y // Does not conform
你还可以将引用类型转换为子类型。这将在之后的文章中被介绍。
Nothing
是所有类型的子类型,也称为底部类型。类型 Nothing
是没有值的。常见的用途是发出非终止信号,例如抛出异常、程序退出或无限循环(即,它是一种没有对值进行求值的表达式,或者是一种不返回正常值的方法)。
Null
是所有引用类型的子类型(即 AnyRef
的任何子类型)。它有一个由关键字 null
标识的单一值。Null
主要用于与其他JVM语言的互操作性,并且几乎不应该在Scala代码中使用。我们将在稍后的文章中介绍 null
AnyVal
は値の型を表します。 Null を許容しない事前定義された値の型が 9 つあります: Double
、Float
、Long
、Int
、Short
、Byte
、Char
、Unit
、および Boolean
。 Unit
は意味のない値の型です。 Unit
のインスタンスは 1 つだけです: ()
のように宣言できます。すべての関数は何らかの値を返す必要があるため、Unit
は便利な戻り値の型です。 AnyRef
は参照型を表します。値以外の型はすべて参照型として定義されます。 Scala のすべてのユーザー定義型は、AnyRef
のサブタイプです。 Scala が Java ランタイム環境で使用されている場合、AnyRef
は Java.lang.object
に対応します。
これは、文字列、整数、文字、ブール値、関数が他のオブジェクトと同様にすべてオブジェクトであることを示す例です:
rrreee
List[Any]
リスト型の変数を定義します。リストはさまざまなタイプの要素で初期化されますが、それらはすべて scala.Any
のインスタンスであるため、すべてをリストに追加できます。 以下はプログラムの出力です: 🎜rrreee🎜型変換🎜🎜値の型は次の方法で変換できます:🎜🎜🎜🎜🎜🎜例: 🎜rrreee🎜変換は一方向です。以下の最後のステートメントはコンパイルされません: 🎜rrreee🎜 参照型をサブタイプに変換することもできます。これについては後の記事で説明します。 🎜🎜Nothing と Null🎜🎜Nothing
はすべてのタイプのサブタイプであり、ボトム タイプとも呼ばれます。タイプ Nothing
には値がありません。一般的な使用法は、例外のスロー、プログラムの終了、無限ループ (値に評価されない式、または通常の値を返さないメソッド) など、終了しないことを通知することです。 🎜🎜Null
は、すべての参照型のサブタイプです (つまり、AnyRef
のサブタイプ)。キーワード null
で識別される値が 1 つあります。 Null
は主に他の JVM 言語との相互運用性のために使用され、Scala コードではほとんど使用されるべきではありません。 null
の代替案については、後の記事で説明します。 🎜🎜🎜🎜🎜🎜🎜🎜🎜以上が【スカラツアー】3統一型 - TOUR OF SCALA SiFouの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。