您的位置:首页 > 编程语言

scala编程--scala基础特征

2015-06-04 13:53 120 查看
1.带类型的参数化数组

再scala中可以使用new实例化对象或者是类实例

翻译的,没翻译的,都不好翻译,上代码

val greetStrings = new Array[String](3)
greetStrings(0) = "Hello"
greetStrings(1) = ", "
greetStrings(2) = "world!\n"
for(i <- 0 to 2 ){
 }


其中

greetStrings(0) = "Hello"
greetStrings(1) = ", "
greetStrings(2) = "world!\n"


演示了scala如何看待val的意义的重要概念。当你用val定义一个变量后,这个变量就不能被重复赋值了,但是它指向的对象仍可以暗自改变。所以在本例中,不能把greetStrings重新赋值成不同的数组;greetStrings将永远指向那个被他初始化的Array[String]实例。但是我们可以一遍一遍的修改那个Array[String]的元素,因此数组本身是可变的。

scala的另一个通用规则:如果方法尽带一个参数,你可以不用带点或括号的调用它。 to实际上是带一个Int参数的方法。代码 0 to 2 被转换冲方法调用(0).to(2)

从技术上讲,scala没有操作符重载,因为他根本没有传统意义上的操作符。取而代之的是,诸如+,-,*,/这样的字符可以用来做方法名。

与Java相比scala很少有特例。数组和scala里的其他的类一样只是类的实现。当你在一个或多个值或变量外使用括号时,scala会把它转换成对名为apply方法的调用。意识greetStrings(i)转换成greetStrings.apply(i).所以scala里访问数据访问数据元素也只不过是跟其他一样是方法调用。

这个原则不仅限于数组:任何对某些括号中的参数的对象的应用将都被转换为对apply方法的调用。当然前提是这个类型实际定义过apply方法。所以这不是一个特例,而是一个通则。

与之类似的是,当对于带有括号并包含一到多个参数的变量赋值时,编译器会将它转换成update方法

greetingStrings(0) = "Hello"

将被转换为

greetStrings.update(0) = “Hello”

2使用list

方法不应该有副作用是函数风格编程的一个很重要的理念,方法唯一的效果应该是计算并返回值。用这种方式的好处就是方法之间很少纠缠在一起,因此就更加可靠和可重用。

另一个好处是传入传出的方法的所有东西都被类型检查器检查,因此逻辑错误会更有可能把自己表现为类型错误。把这个函数式编程的哲学应用到对象世界里意味着使对象不可变

scala的list类是共享相同类型的不可变对象序列,和数组一样,list[String]包含的仅仅是String.scala的List,scala.List.不同于Java的java.util.List.总是不可变的(Java中的LIst可变)

List()或Nil 空List

List("a","b","c") 创建带有三个值得新List[String]

val thrill = "a" :: "b" :: "c" :: Nil 创建带有三个值得新List[String] Nil是定义类的捷径

List("a","b") ::: List("c","d") 叠加两个列表,并返回一个全新的List

......

3使用Tuple(元组)

与列表一样,元组也是不可变的,但与列表不同,元组可以包含不同类型的元素。

如果我们需要在方法里返回多个对象,Java里你将经常创建一个JavaBean样子的类去装多个返回值,scala里你可以简单的返回一个元组。:实例化一个装有一些对象的新元组,只要把这些对象放在()里,用逗号分开就好了

访问数组中的元素,用点号,下划线和一个基于1的元素索引访问它。

val pair = (99,"Alan")

print(pair._1)

print(pair._2)

那么问题来了,同样是不可变的,为什么不能像List这样返回元素呢:pair(0),那是因为List的apply方法始终返回同样的类型,但是元组里的或许类型不同。

4.使用Set和Map

5.学习识别函数式风格

6.从文件里读取信息行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: