欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > Scala课后总结(2)

Scala课后总结(2)

2025/4/1 8:02:43 来源:https://blog.csdn.net/2402_82540392/article/details/146587446  浏览:    关键词:Scala课后总结(2)

Scala的基本语法

Scala没有基本数据类型与包装类型的区分,统一都是类

类型层次结构

Any  是所有类的超类,处于类型继承结构最底层 。 AnyVal  是值类型的超类,像Byte、Int等数值类型都继承自它; AnyRef  是引用类型的超类,对应Java里的对象引用类型。 Nothing  是所有类型的子类型,可用于表示非正常终止或空值 ; Unit  类似于Java中的  void  ,表示无值。

AnyRef:是Scala中所有引用类型的基类 ,对应Java里对象引用相关类型体系。

AnyVal:是所有值类型的基类 ,像Byte、Int等基本数值类型都继承自它。

Nothing:是所有类的子类,比较特殊,没有实际对象实例,但可用于类型定义。文中示例  scala> def foo = throw new RuntimeException  ,这里  foo  的类型为  Nothing  ,表示该方法会抛出异常非正常结束,没有正常返回值类型。

Null:是所有  AnyRef  的子类 , null  是其唯一对象,用于表示引用类型的空值。

变量定义

强类型语言与弱类型语言对比:以Java作为强类型语言示例,定义变量时需明确指定类型

变量与常量定义: var  用于定义可变变量,值可修改; val  用于定义不可变常量,值不可变,类似于Java中用  final  修饰的变量 。在Scala中鼓励使用  val  来定义变量,增强程序的不可变性和安全性。

基本操作符

算术操作符:Scala的算术操作符+ 、 - 、 * 、 / 、 %  等,以及逻辑操作符  & 、 | 、 ^ 、 >> 、 <<  等,与Java的算术操作符功能类似。但在Scala中,这些操作符本质上是数据类型的方法,例如  1 + 1  等价于  1.+(1)  。还提到  1.to(10)  也可写成  1 to 10  这种中缀表示法。并且Scala没有  ++ 、 --  操作符 ,要实现自增自减需使用  += 、 -=  ,如  num += 1  。

字符串插值操作

插值器介绍:Scala有三个字符串插值器  s 、 f 、 raw  。

s  插值器:在任何字符串前加上  s  ,可在字符串中直接使用变量,如  var name = "tom"; var src = s"hello ${name}"  ,结果  src  为  "hello tom"  。

f  插值器:除具备  s  插值器功能外,还能进行格式化输出,在变量后用  %  指定输出格式 。

raw  插值器:对字面量中的字符不做编码处理,功能与  s  插值器类似 。

 

条件表达式基本形式

单分支和多分支  if - else :Scala中条件表达式有  if (单分支)、 if - else (多分支)两种基本形式。

支持混合类型表达式

Scala的条件表达式支持混合类型表达式,如  val z = if (x > 1) 1 else "error"  ,当  x > 1  时  z  为  1  (整数类型),否则为  "error"  (字符串类型),此时  z  的类型被推断为  Any  ,它是  Int  和  String  的父类 。

缺失  else  情况

如果  if  表达式缺失  else  部分,相当于  if (x > 2) 1 else ()  ,这里  ()  对应Scala中的  Unit  类,类似于Java中的  void  。

表达式都有值

在Scala中每个表达式都有值,像  val n = if (x > 2) 1 else ()  , n  的类型为  AnyVal  ,值根据条件判断可能是  1  或  ()  。

当条件表达式的结果类型可能为多种时,类型会被推断为合适的父类。如  val y = if(1>1) 1 else "error"  , y  的类型为  Any  ,因为结果可能是  Int  或  String  ;若  val y = if(x>1) 1  (没有  else  部分), y  的类型为  AnyVal  ,默认  else  部分为  ()  。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词