scala编程--scala基础特征

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.从文件里读取信息行







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值