试水Scala学习

Scala是我“感兴趣的”

我想要使用scala的初衷是我一个学习的项目是用spark实现一个实时推荐的模块。在深入学习spark时,深感机器学习封装成包的便捷,同时,也为做数据处理用DataFrame那独特的语法所困扰,所以想要系统学习Scala这门语言。初期计划观看讲解视频以及书籍《Programming Scala》同步学习。

Scala据说是“富有魅力的”

  • 是运行在JVM和JavaScript之上的语言
  • 拥有静态类型
  • 混合式编程范式——面向对象编程。在Scala眼里,一切都是对象
  • 混合式编程范式——函数式编程
  • 复杂的类型系统
  • 简洁、优雅、灵活的语法
  • 可扩展的架构

Scala适应当前时代。当前我们会遇到很多技术挑战,如大数据、通过并发实现高扩展性、提供高可用并健壮的服务。Scala语法简洁但却富有表现力,能够满足这些技术挑战。在享受Scala最先进的 语言特性的同时,你还可以拥有成熟的JVM、库以及生产工具给你带来的便利。
《Programming Scala》

实现Scala的“Hello World”

运行的环境:REPL

这里写图片描述

程序

class Upper{
def upper(strings:String*):Seq[String]={
strings.map((s:String) => s.toUpperCase())
}
}
val up = new Upper
println(up.upper("Hello","World"))

发现一个问题:在用REPL时貌似每一行开头都不能有空格?易读性较差

解释一下每一行代码的含义

class Upper{}

定义一个Upper类,类的成员和方法在{}内

def upper(strings:String*):Seq[String]={}
  • def是定义方法的关键字。
  • (strings:String*)指的是可选的参数列表,strings是输入参数名,String*那个“*”代表的是可以输入多个字符串,它们之间用逗号隔开,例如程序中的up.upper(“Hello”,”World”)。
  • Seq[String]是“可选的”返回类型,因为有时候,Scala能够自己推导出返回类型。Seq(代表Sequence)是集合的一种抽象,代表着“某类事物的序列”,跟Java中的泛型类似。Scala使用方括号([…])表示参数类型
我感觉最难的地方来了
strings.map((s:String) => s.toUpperCase())

函数方法体中对字符串集合调用了map方法,map方法的输入参数为函数字面量。而这些函数字面量便是“匿名”函数。在其他语言中,它们也被称为Lambda、闭包、块或过程。
在这个示例中,我们向map方法传递了下列函数字面量:(s:String) => s.toUpperCase()。此函数字面量的参数表中只包含了一个字符串参数s。它的函数体位于箭头=>之后(UTF8也允许使用=>)。该函数体调用了s的UpperCase()方法。此次调用的返回值会自动被这个函数字面量返回。在Scala中,函数或方法中把最后一条表达式的返回值作为自己的返回值。
我们对序列对象strings调用了map方法,该方法会把每个字符串依次传递给函数字面量,并将函数字面量返回的值组成一个新的集合。举个例子,假如在原先的列表中有五个元素,那么新生成的列表也将包含五个元素。

运行结果

这里写图片描述

该进程序,简化代码

object Upper{
def upper(strings:String*)=strings.map(_.toUpperCase())
}
println(Upper.upper("Hello","World"))

代码解释

object Upper

这里直接定义了一个单例对象?我的理解就是一个对象可以直接用的

map(_.toUpperCase())

map方法接受单一函数参数,而单一函数也只接受单一参数。在这种情况下,函数体只使用一次该参数,所哟我们使用占位符_来替代命名参数。也就是说:_起到了匿名函数的作用,在调用toUpperCase方法之前,_将被字符串替换。Scala同时也为我们推断出了该变量的类型为String类型。

未完待续…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值