>  기사  >  백엔드 개발  >  [스칼라 투어] 3-통합형 - TOUR OF SCALA SiFou

[스칼라 투어] 3-통합형 - TOUR OF SCALA SiFou

不言
不言원래의
2018-03-30 14:25:251615검색

스칼라에서는 숫자, 함수 등 모든 값에 유형이 있습니다. 다음 그림은 유형 계층 구조의 하위 집합을 보여줍니다.

[스칼라 투어] 3-통합형 - TOUR OF SCALA SiFou

Scala 유형 계층 구조

Any 유형은 모든 유형의 상위 유형이며 최상위 유형이라고도 합니다. equals, hashCodetoString과 같은 몇 가지 일반적인 메서드를 정의합니다. Any에는 AnyValAnyRef라는 두 개의 직접적인 하위 클래스가 있습니다. Any 类型是所有类型的父类型,也称为顶级类型。它定义了一些通用的方法,如 equalshashCodetoStringAny 有两个直接子类:AnyValAnyRef

AnyVal 代表值类型。有9种预定义的值类型,它们是不可为空的:DoubleFloatLongIntShortByteCharUnitBooleanUnit 是一个不具备任何意义的值类型。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>

类型转换

值类型可以通过以下方式进行转换:

[스칼라 투어] 3-통합형 - TOUR OF SCALA SiFou

例如:

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和Null

Nothing 是所有类型的子类型,也称为底部类型。类型 Nothing 是没有值的。常见的用途是发出非终止信号,例如抛出异常、程序退出或无限循环(即,它是一种没有对值进行求值的表达式,或者是一种不返回正常值的方法)。

Null 是所有引用类型的子类型(即 AnyRef 的任何子类型)。它有一个由关键字 null 标识的单一值。Null 主要用于与其他JVM语言的互操作性,并且几乎不应该在Scala代码中使用。我们将在稍后的文章中介绍 null

AnyVal은 값 유형을 나타냅니다. null을 허용하지 않는 9가지 사전 정의된 값 유형이 있습니다: Double, Float, Long, Int, Short, Byte, Char, UnitBoolean. 단위는 아무런 의미가 없는 값 유형입니다. Unit의 인스턴스 하나만 ()와 같이 선언할 수 있습니다. 모든 함수는 일부 값을 반환해야 하므로 Unit은 유용한 반환 유형입니다.


AnyRef는 참조 유형을 나타냅니다. 값이 아닌 모든 유형은 참조 유형으로 정의됩니다. Scala의 모든 사용자 정의 유형은 AnyRef의 하위 유형입니다. Scala가 Java 런타임 환경에서 사용되는 경우 AnyRefJava.lang.object에 해당합니다.

다음은 문자열, 정수, 문자, 부울 및 함수가 다른 객체와 같은 객체임을 보여주는 예입니다.
rrreee

List[Any] 목록 유형의 변수를 정의합니다. 목록은 다양한 유형의 요소로 초기화되지만 모두 scala.Any의 인스턴스이므로 모두 목록에 추가할 수 있습니다.

다음은 프로그램의 출력입니다. 🎜rrreee🎜유형 변환🎜🎜값 유형은 다음과 같은 방법으로 변환할 수 있습니다.🎜🎜🎜[스칼라 투어] 3-통합형 - TOUR OF SCALA SiFou🎜🎜🎜예: 🎜rrreee🎜변환은 단방향입니다. 아래 마지막 문은 컴파일되지 않습니다. 🎜rrreee🎜 참조 유형을 하위 유형으로 변환할 수도 있습니다. 이에 대해서는 이후 기사에서 다룰 것입니다. 🎜🎜Nothing 및 Null🎜🎜Nothing은 모든 유형의 하위 유형이며 하단 유형이라고도 합니다. Nothing 유형에는 값이 없습니다. 일반적인 용도는 예외 발생, 프로그램 종료 또는 무한 루프(즉, 값으로 평가되지 않는 표현식 또는 일반 값을 반환하지 않는 메서드)와 같은 비종료 신호를 보내는 것입니다. 🎜🎜Null은 모든 참조 유형의 하위 유형입니다(예: AnyRef의 모든 하위 유형). null 키워드로 식별되는 단일 값이 있습니다. Null은 주로 다른 JVM 언어와의 상호 운용성을 위해 사용되며 Scala 코드에서는 거의 사용해서는 안됩니다. 이후 문서에서 null에 대한 대안을 다룰 것입니다. 🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 [스칼라 투어] 3-통합형 - TOUR OF SCALA SiFou의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.