Scala详解--------基础知识详解

来源:互联网 发布:linux中删除文件命令 编辑:程序博客网 时间:2024/04/29 23:39

Chapter1

1、Scala解释器

启动Scala解释器的方法如下:

自己总结的:

1.打开执行命令栏WIN+R  ,输入cmd,在命令行上输入Scala等待启动如下



如上面所示即可启动Scala

2.使用bin内部的启动脚本




找到你所安装Scala的目录,并在Scala的bin文件夹中找到scala.bat文件,打开即可。


以上是我知道的打开方式,另外,可以使用eclipseEE进行安装插件,进行使用,具体的使用情况可以参考上一篇文章。


下面来测试一下Scala编译器的效果吧



测试成功,说明可以进行接下来的Scala的学习了。


下面来学习声明值和变量。

在以上的测试中,我们可以发现计算中出现res0、res1等变量的出现,在Scala中不仅可以使用这些名称,还可以自己声明。如:


val answer = 8*5+8

结果为:answer:int = 48


其中使用  val  定义的值实际上是一个常量----------无法改变其值


如果声明可变的的变量用   var  :

var counter = 0 

counter = 1


在Scala中鼓励使用val,对于java和C++的同志似乎很惊讶,我也是如此。

声明值或变量必须进行初始化。负责会报错。


注意的是:在Scala中的声明值和变量时的格式:

如:val  greeting : Any: ="Hello“

        val  Scala      :String="world"


另外在变量声明和赋值语句之后,我们都没有使用分号。在Scala中只有一行中有多条语句才需要分号。


常用类型:

Scala有7中常用类型:Byte、Char、Short、Int、Long、Float、Double以及Boolean类型

跟Java不同的是Scala这些类型都是类。Scala不刻意去区分类型和应用类型。可以对数字执行方法如:

1.toString()//结果仍为1  类型为:String

1.to(10)产出Range(1,2,3,4,5,6,7,8,9,10)

定义变量

Scala有两种变量,val和var。val类似于Java里的final变量。一旦初始化了,val就不能再赋值了。与之对应的,var如同Java里面的非final变量。var可以在它生命周期中被多次赋值。

?
1
2
3
valmsg1=”hello scala”
 
varmsg2=”hello world”

仔细看上面定义的2个变量好像都没有类型声明,这是怎么回事呢?这就要说到Scala的类型推断(type inference),因为你用了一个字符串来初始化msg变量,Scala推断msg的类型是String。你也可以显式地定义类型,有些时候也应该这么做。显式的类型标注不但可以确保Scala编译器推断你倾向的类型,还有助于以后代码的阅读。

?
1
valmsg :String=”hello scala” 与Java不同的是类型声明在变量后面,用一个”:”分隔。

4.定义函数

上面已经定义了变量,现在开始学习怎么定义一个函数

?
1
2
3
4
5
6
defmax(x:Int, y:Int):Int ={ //定义函数
    if(x > y) x
    elsey
  }
 
max(3,7//调用函数

自己对照看与 java函数有什么不同,函数体只有一句的大括号可以省略写成 :

?
1
defmax(x:Int, y:Int) =if (x > y) x elsey

结果类型也去掉了,编译器类型推断可得出,尽管如此带上结果类型也是一个好习惯,便于其他人阅读代码。

image

Scala的Unit结果类型指的是函数没有返回有用的值。Scala的Unit类型比较接近Java的void类型,而且实际上Java里每一个返回void的方法都被映射为Scala里返回Unit的方法。因此结果类型为Unit的方法,仅仅是为了它们的副作用而运行

注:java里的i++和++i在scala里是行不通的。


Scala中的类型

Scala强大的类型系统让我们可以使用更具有表现力的表达式。一些主要的特点如下:

  • 支持参数多态,泛型编程
  • 支持(局部)类型推导,这就是你为什么不需要写val i: Int = 12: Int
  • 支持存在向量(existential quantification),给一些没有名称的类型定义一些操作
  • 支持视图。 我们下个星期再讨论;给定的值从一个类型到其他类型的“可转换性”
声明:在Scala中我们用方法,而不是强制类型转换,来做数值类型之间的转换。如:

99.44.toInt得到99

99.toChar()得到‘c’

toString是将任意的对象转换成字符串。


算数和操作符重载:

Scala的

算数和操作符重载运行效果和JavaC++中预期的效果是一样的。

  • 使用中缀数学操作符+、-、*、/、%并产生对应的数值结果

  • 使用比较操作符<、>、>=、=<并产生布尔值结果

  • 使用逻辑操作符&&、||并产生布尔值结果

  • 使用对等操作符==、!=并产生布尔值结果

  • 使用位操作符&、|、^、~并产生数值结果
      实例如图所示:
  

实际上,ScaLa没有任何操作符,所有的操作符运算都是对方法(函数)的调用

•如1+2实际上是调用了.+() 这个方法1.+(2)

•在具体的调用中,调用+实际上包含了+的各种类型参数的重载,而无需额外定义
前缀后缀操作符是一元操作符,而中缀操作符是二元操作符
操作符具有优先级(表达式的读取与执行并不依赖与顺序,更关键是操作符的优先级)
如:
1+5*4=21 
(1+5)*4=24

操作符优先级一般如下:

•特殊字符  * / %  >  +-  > : > =! > <> > & > ^ > | > 其他字母 > 赋值操作符

•scala支持如“***”“+-+”之类的操作符重载,考虑其优先级一般以第一个符号为主

•值得注意的是,形如“*=”的操作符重载,会被认为是赋值操作符而具有最低的优先级 即 m *= n+5 等价于 m *= (n+5)





0 0
原创粉丝点击