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学习之路相关推荐

  1. scala学习之路:1简单的打印输出,以及for循环的使用

    Scala语言学习 世界语言一大抄,自然语言也是一大抄,这年头不多学几门语言怎么混.这里用到底Scala编译器是从网上下载的(http://scala-ide.org) Scala IDE build ...

  2. Scala学习之路 (六)Scala的类、对象、继承、特质

    一.类 1.类的定义 scala语言中没有static成员存在,但是scala允许以某种方式去使用static成员 这个就是伴生机制,所谓伴生,就是在语言层面上,把static成员和非static成员 ...

  3. Scala学习之路之篇六(类与对象)

    Scala 类和对象 类是对象的抽象,而对象是类的具体实例. 类是抽象的,不占用内存,而对象是具体的,占用存储空间. Scala中的类不声明为public,一个Scala源文件中可以有多个类. 类定义 ...

  4. scala学习-scala读取Hbase表中数据并且做join连接查询

    1.业务需求:sparkSQL on hbase ,sparkSQL直接读取Hbase中的两个表,进行连接查询. 2.图示 绿色的线 上图中绿色的线是做过测试的,直接在hive中建表,然后load数据 ...

  5. 大数据学习之路(转载)

    #大数据学习之路(转载) 博文地址https://blog.csdn.net/zys_1997/article/details/78358992 看到一个博主写的大数据学习路线,看了比较心动,想着自己 ...

  6. Hive学习之路(二):Hive表操作详讲

    操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...

  7. 送你九年经验,我的Java学习之路你也可以复制

    这篇文章写的非常认真,足足花了两周时间,不是简单的资料聚合,我将多年的工作和学习经验写下来了,相信看完后你能有一种豁然开朗的感觉,这就是我要达到的目的,希望不要被打脸. 最近身边很多人在问:Java ...

  8. python学习之路 - 从入门到精通到大师

    欢迎关注WX公众号:[程序员管小亮] 文章目录 欢迎关注WX公众号:[程序员管小亮] 0.前言 1.资源推荐 2.应用领域和就业形势分析 3.python系列文章 4.python基础教程 5.< ...

  9. Spark学习之路一——Spark基础及环境搭建

    Spark学习之路一--Spark基础及环境搭建 文章目录 一. Spark 概述 1.1 概述 1.2 优势特性 1.2.1 运行速度快 1.2.2 容易使用 1.2.3 通用性 1.2.4 运行模 ...

最新文章

  1. 本地xshell损坏了着急拷贝服务器上的大文件怎么办?有办法lrzsz来帮忙
  2. 如何在solaris下安装memcached
  3. Java黑皮书课后题第4章:4.19(商业:检测ISBN-10)改写编程练习题3.9,将ISBN号作为一个字符串输入
  4. 操作系统之I/O管理:4、缓冲区管理(单缓冲、双缓冲、循环缓冲、缓冲池)
  5. xadmin实现表单验证
  6. mysql根据外键多条件查询_MySQL练习-主外键多表查询
  7. 某考试T1 game
  8. 360修复高危漏洞可以修复吗_大理石刮痕可以修复吗?如何修复?
  9. intel网卡驱动下载linux,Intel网卡驱动下载_万能英特尔网卡驱动_万能网卡驱动_5分享...
  10. 使用python合并多个pdf文件
  11. D. Berserk And Fireball(模拟)
  12. 详解xlwings包,用Python代替Excel VBA
  13. 计算机打印机共享失败,打印机共享失败终极解决办法
  14. 宁波诺丁汉计算机学院,宁波诺丁汉大学学子帝国理工计算机录取
  15. win10在此计算机上找不到系统映像,图文教你win10系统使用DISM修复找不到源的问题....
  16. 认认真真几个高质量人工智能方向的原创公众号
  17. PC VR游戏的CPU性能分析与优化
  18. LSTM对比Bi-LSTM的电力负荷时间序列预测(Matlab)
  19. 漂亮的红色玫瑰花——情人节-圣诞节专属-代码实现
  20. 2009年必看十大动漫游戏改编电影

热门文章

  1. 计算机仿真实训操作开车步骤,计算机仿真上机实训指导书.doc
  2. mysql数据设置浮动_浮动float
  3. I/O多路复用技术是什么?
  4. useReducer使用和原理
  5. Linux下的JAVA命令参数_以java命令为例解析linux命令行调用语句
  6. php 复选框 未选,php – 在表单发布时如何获取复选框元素中未选中复选框的值?...
  7. 华三ospf联动bfd_OSPF、BGP、ISIS的路由收敛时间、缩减路由收敛时间的措施有哪些...
  8. mysql5.7.6允许远程_mysql5.7 设置远程访问
  9. 腾讯云服务器CentOS 7安装JAVA JDK并运行class文件
  10. mysql 截取json字符串_mysql如何截取一个json字符串?