简记:我的Scala学习之路
2019独角兽企业重金招聘Python工程师标准>>>
前言
此篇文章主要用于纪录个人学习Scala过程中的一些相关信息,以便备忘。
一、引子:《函数式编程思维》
对于函数式编程,先前都只是停留在“听说过”的层面而已。直到阅读了《函数式编程思维》这一书后,方大概有所理解,并从中获得了不少启蒙。
学习一种新思想比较困难,尤其原来已固化另一种同类的思想。所以,学习函数式编程这一新思想,最重要的是能把原来已伴随多年的面向对象编程思维抛空。
在这里,有很多概念,如基于集合的“三板斧”:筛选、映射、折叠/化约;柯里化和函数的部分施用;模式匹配等等,更多可阅读《函数式编程思维》,以便获取更系统、更专业的讲解。
二、scala语法洞悉
学习了函数式编程这一思想影响,接下来应该选择一门函数式编程语言进行更深入的理解、更具体的实践。在这里,简单了解和对比目前已有的函数式编程语言后,我选择了scala,继而学习了《scala函数式编程》一书。这本书里,有很多更高级技能的讲解,以及更全面的剖析,并且有不少练习题可以进行实践。
但对于初学者,在接触高级特性前,应该由浅到深,所以最初应该学习scala的基本语法。网上有很多优秀的资料,如:
Scala 初学指南 (简单明了的入门指南)
scala | 写点什么 (更为详尽的说明)
在掌握scala基本语法后,便可再进行适当的编程实践练习,以加深、巩固所学的新语言。如:
scala99问题 (附有源代码答案)
其中,比较有趣的是对逻辑运算与、或、非这样的实现。从中可以发现,函数式编程都是先找到最基本的因子,然后再在这基础上进行衍变。
更多更丰富的资源,可查看GitHub上收集的信息:https://github.com/lauris/awesome-scala
三、eclipse开发环境搭建与sbt涉猎
安装scala eclipse
在前面的scala语法学习以及编程练习中,都可以使用简单的CLI模式。但对于项目开发,还是使用IDE环境会更为人性化,也更能提升开发的效率和保障项目的进度。
Scala提供了eclipse开发环境,可前往官网:http://scala-ide.org/ 下载安装。
安装sbt
scala的eclipse安装很简单,但sbt的安装则相对步骤多一点,并且需要与eclipse整合的话,则需要更多的工序。先来简单认识一下什么是sbt,sbt即:标准构建工具(Standard Building Tool),关于sbt的使用和更多说明,请见官网:http://www.scala-sbt.org/。其中里面也有中文翻译的文档,虽不全,但并不影响阅读使用。
启动和初始化sbt
下面重点讲一下sbt的启动和配置。
sbt的安装很简单,如在windonws系统下,到官网下载安装后即可。但难点在于对sbt的初始化配置。
在安装好sbt后,还不能使用。需要进入命令行窗口,找到所安装的目录,执行sbt命令,如"D:\Program Files (x86)\sbt\bin\sbt"。
需要注意的是,因为在启动时sbt会下载很多jar包和其他资源,这些资源都是需要从国外下载的,所以此过程需要一定时间,需要慢慢等待。如果有发现超时的情况,可以多次启动,直到全部需要的资源安装下载成功。也可以设置一些国内的源地址。虽然这个过程很漫长,但如果不使用sbt而纯手工来下载jar包并管理的话,日后会消耗更多宝贵的时间。因为我曾经就这样试过。。。到最后发现还是sbt的可贵之处。
全部ok后再启动sbt,可以看到类似以下的内容:
D:\>"D:\Program Files (x86)\sbt\bin\sbt"
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; sup
port was removed in 8.0
[info] Loading global plugins from C:\Users\ASIMO\.sbt\0.13\plugins
[info] Set current project to root (in build file:/D:/)
>
然后,即可按照sbt官网的示例,创建一个新项目:
$ sbt new sbt/scala-seed.g8
随后,执行run命令运行新建的项目。
整合sbt和eclipse
sbt上有丰富的插件资源,其中一个很重要的插件是: sbteclipse, 可用于将sbt生成的项目再转化成eclipse的项目,从而导入到eclipse中。
该插件的安装和使用,可参考:https://github.com/typesafehub/sbteclipse
添加后,记得需要重新启动sbt以便下载安装sbteclipse。随后,再导入到eclipse即可。
安装教程可参考:SPARK学习之--- eclipse / sbt / scala 配置
更多其他的插件,可参考:Community Plugins
Scala版本差异下两个问题的修复
1、Description Resource Path Location Type
scalactic_2.12-3.0.1.jar of sbt_http_wrapper build path is cross-compiled with an incompatible version of Scala (2.12.0). In case this report is mistaken, this check can be disabled in the compiler preference page. sbt_http_wrapper Unknown Scala Version Problem
对于此不同版本的兼容性问题,可手动下载Scala 2.12.1(http://www.scala-lang.org/download/2.12.1.html)下载压缩包解压后,在Eclipse -> Window -> Prefenrence -> Scala -> Installations -> Add 添加更新版本的scala。
随后,对于有版本问题的项目,再指定使用最新版本的scala即可。右键项目 -> Properties -> Scala Compiler -> Use Project Settings -> 选中刚才添加的最新版本的scala,然后重新构建即可。
需要注意的是,虽然上面的版本兼容的问题可以在eclipse里设置屏蔽,但不建议这样做,因为到最后还是会影响项目的正常运行。
2、java.lang.NoSuchMethodError: scala.Function2.$init$ Lscala/Function2
在Scala 2.12修已复,请见:http://www.tuicool.com/articles/MFZ3ea
对于以上版本的问题,可以有两种方式:1、降低项目Scala版本( scalaVersion := "2.12.0", )、或:2、提升开发环境Eclipse的Scala版本。
四、爬虫实践
在学习了scala基本语法,和搭建好开发环境后,我们便可以进行一些项目的实战。这里,基于学习的目的,我们可以尝试编写开发一些友好的爬虫来加深对scala项目开发的理解。
五、更富表现力的Scala
比较优秀的国外Scala社区:https://scalerablog.wordpress.com/category/english/
其中一篇较好的文章(待翻译,关于DSL的):
Scala: One language to rule them all (II): https://scalerablog.wordpress.com/2016/05/30/scala-one-language-to-rule-them-all-ii/
Scala: One language to rule them all (I):https://scalerablog.wordpress.com/2016/04/18/scala-one-language-to-rule-them-all-i/
已翻译:
Scala:一种统治DSL的语言(I)
Scala:一种统治DSL的语言(II)
Scala 语言官方文档: http://www.scala-lang.org/api/current/scala/App.html
转载于:https://my.oschina.net/dogstar/blog/828630
简记:我的Scala学习之路相关推荐
- scala学习之路:1简单的打印输出,以及for循环的使用
Scala语言学习 世界语言一大抄,自然语言也是一大抄,这年头不多学几门语言怎么混.这里用到底Scala编译器是从网上下载的(http://scala-ide.org) Scala IDE build ...
- Scala学习之路 (六)Scala的类、对象、继承、特质
一.类 1.类的定义 scala语言中没有static成员存在,但是scala允许以某种方式去使用static成员 这个就是伴生机制,所谓伴生,就是在语言层面上,把static成员和非static成员 ...
- Scala学习之路之篇六(类与对象)
Scala 类和对象 类是对象的抽象,而对象是类的具体实例. 类是抽象的,不占用内存,而对象是具体的,占用存储空间. Scala中的类不声明为public,一个Scala源文件中可以有多个类. 类定义 ...
- scala学习-scala读取Hbase表中数据并且做join连接查询
1.业务需求:sparkSQL on hbase ,sparkSQL直接读取Hbase中的两个表,进行连接查询. 2.图示 绿色的线 上图中绿色的线是做过测试的,直接在hive中建表,然后load数据 ...
- 大数据学习之路(转载)
#大数据学习之路(转载) 博文地址https://blog.csdn.net/zys_1997/article/details/78358992 看到一个博主写的大数据学习路线,看了比较心动,想着自己 ...
- Hive学习之路(二):Hive表操作详讲
操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...
- 送你九年经验,我的Java学习之路你也可以复制
这篇文章写的非常认真,足足花了两周时间,不是简单的资料聚合,我将多年的工作和学习经验写下来了,相信看完后你能有一种豁然开朗的感觉,这就是我要达到的目的,希望不要被打脸. 最近身边很多人在问:Java ...
- python学习之路 - 从入门到精通到大师
欢迎关注WX公众号:[程序员管小亮] 文章目录 欢迎关注WX公众号:[程序员管小亮] 0.前言 1.资源推荐 2.应用领域和就业形势分析 3.python系列文章 4.python基础教程 5.< ...
- Spark学习之路一——Spark基础及环境搭建
Spark学习之路一--Spark基础及环境搭建 文章目录 一. Spark 概述 1.1 概述 1.2 优势特性 1.2.1 运行速度快 1.2.2 容易使用 1.2.3 通用性 1.2.4 运行模 ...
最新文章
- 本地xshell损坏了着急拷贝服务器上的大文件怎么办?有办法lrzsz来帮忙
- 如何在solaris下安装memcached
- Java黑皮书课后题第4章:4.19(商业:检测ISBN-10)改写编程练习题3.9,将ISBN号作为一个字符串输入
- 操作系统之I/O管理:4、缓冲区管理(单缓冲、双缓冲、循环缓冲、缓冲池)
- xadmin实现表单验证
- mysql根据外键多条件查询_MySQL练习-主外键多表查询
- 某考试T1 game
- 360修复高危漏洞可以修复吗_大理石刮痕可以修复吗?如何修复?
- intel网卡驱动下载linux,Intel网卡驱动下载_万能英特尔网卡驱动_万能网卡驱动_5分享...
- 使用python合并多个pdf文件
- D. Berserk And Fireball(模拟)
- 详解xlwings包,用Python代替Excel VBA
- 计算机打印机共享失败,打印机共享失败终极解决办法
- 宁波诺丁汉计算机学院,宁波诺丁汉大学学子帝国理工计算机录取
- win10在此计算机上找不到系统映像,图文教你win10系统使用DISM修复找不到源的问题....
- 认认真真几个高质量人工智能方向的原创公众号
- PC VR游戏的CPU性能分析与优化
- LSTM对比Bi-LSTM的电力负荷时间序列预测(Matlab)
- 漂亮的红色玫瑰花——情人节-圣诞节专属-代码实现
- 2009年必看十大动漫游戏改编电影
热门文章
- 计算机仿真实训操作开车步骤,计算机仿真上机实训指导书.doc
- mysql数据设置浮动_浮动float
- I/O多路复用技术是什么?
- useReducer使用和原理
- Linux下的JAVA命令参数_以java命令为例解析linux命令行调用语句
- php 复选框 未选,php – 在表单发布时如何获取复选框元素中未选中复选框的值?...
- 华三ospf联动bfd_OSPF、BGP、ISIS的路由收敛时间、缩减路由收敛时间的措施有哪些...
- mysql5.7.6允许远程_mysql5.7 设置远程访问
- 腾讯云服务器CentOS 7安装JAVA JDK并运行class文件
- mysql 截取json字符串_mysql如何截取一个json字符串?