Scala小记(一)
Scala小记----初识Scala
一,什么是Scale?
Scala是一门面向对象的,使用JVM运行的函数式编程语言,(函数式编程语言:指的就是那些将方法或者说是函数来作为参数
进行传递的编程语言)。Scala默认引入的包有三个(java.long._ , scala._ , Predef._ ) 注:这三个包下main的内容皆
可以直接使用。
1.1函数式编程的特点?
1.1.1 函数是“一等公民”
(first class)指的是函数与其他数据类型一样,处于一个相互平等的地位,可以赋值给其他变量,亦可以作为参数来传递给另一个
函数,或者说是作为别的函数的返回值。
1.1.2 只用表达式,不用语句
表达式(expression)是一个单纯的运算过程,总是会有返回值;语句(statement)是执行某种操作,没有返回值。函数式编程的
要求就是:值使用表达式,不使用语句。每一步都是作为单纯的运算来做的,而且都有返回值。函数式编程的开发动机就是处理
运算(computation),不考虑系统的读写IO(尽量少)。
1.1.3 没有“副作用”
意味着函数要保持一个独立性,所有的功能就是返回一个新的值,没有其他行为,尤其是不能修改其他的变量的值。
1.1.4 不修改状态
在其他语言中,变量往往保存状态,函数式的编程全局变量不能保存状态,状态一般保存再参数中。
1.1.5 引用透明
指的是函数的运行不依赖外部的变量,只依赖输入参数,任何的时候只要参数相同,引用函数所得到的返回值就总是相同的。
1.2 什么是闭包?
闭包是一个函数,返回值依赖于声明在函数外部的一个或着多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数(可以引用外部的变量)
1.3 Scala代码块?变量?常量?
1.3.1 Scala的代码块?
- 包含在{}中间的代码称之为代码块
- 代码块的最后一行就是这个代码块的返回值(并且无需加return关键字)
1.3.2 Scala的变量和常量?
- Scala的变量和常量的定义需要有一个初始值,如果我们不知道初始值是什么的话,我们可以使用下划线(占位符)来替代
- 只有抽象类可以定位无初始值的变量和常量
Scala小记(一)的更多相关文章
- 小记--------sparksql和DataFrame的小小案例java、scala版本
sparksql是spark中的一个模块,主要用于进行结构化数据的处理,他提供的最核心的编程抽象,就是DataFrame.同时,sparksql还可以作为分布式的sql查询引擎. 最最重要的功能就是从 ...
- Scala 中的函数式编程基础(三)
主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. ...
- jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)
不多说,直接上干货! jdk1.8 源码, Linux的同学可以用的上. 由于源码JDK是前版本的超集, 所以1.4, 1.5, 1.6, 1.7都可以用的上. 其实大家安装的jdk路径下,这 ...
- [原]Paste.deploy 与 WSGI, keystone 小记
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...
- jdb调试scala代码的简单介绍
在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...
- scala练习题1 基础知识
1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等: 2,在scala REPL中,计算3的平方根,然 ...
- 牛顿法求平方根 scala
你任说1个整数x,我任猜它的平方根为y,如果不对或精度不够准确,那我令y = (y+x/y)/2.如此循环反复下去,y就会无限逼近x的平方根.scala代码牛顿智商太高了println( sqr(10 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- Scala化规则引擎
1. 引言 什么是规则引擎 一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑.业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技 ...
随机推荐
- 用navicat进行身份验证连接出现cannot connect to Mongodb authentication failed
用navicat进行身份验证连接出现cannot connect to Mongodb authentication failed. 解决办法: 1.打开mongoDB连接 win+r --cmd-- ...
- java-对象引用和对象本身
示意图 应用场景 1.赋值 只有用新的对象本身直接赋值给对应引用,该对象引用的值会改变,因为对象引用指向的对象本身改变了. 2.方法入参 调用方法和被调用方法. 代码 import com.aliba ...
- 【BIM】基于BIMFACE的空间拆分与合并
BIMFACE中矩形空间拆分与合并 应用场景 在BIM运维场景中,空间同设备一样,作为一种资产被纳入运维管理体系,典型的应用场景例如商铺.防火分区等,这就涉及到空间的拆分和合并,在bimface中,已 ...
- Agumaster 增加雪球网爬虫
- 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记
第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...
- 第3课 - makefile伪目标的引入
第3课 - makefile伪目标的引入 1. makefile 中的目标究竟是什么? (1)默认情况下,make 认为目标对应着一个文件 ==> 目标即文件名 (2)make 首先会检测目 ...
- Arnold变换(猫脸变换)
Arnold变换是Arnold在遍历理论研究中提出的一种变换.由于Arnold本人最初对一张猫的图片进行了此种变换,因此它又被称为猫脸变换.Arnold变换可以对图像进行置乱,使得原本有意义的图像变成 ...
- 信号、多app应用、flask-script
信号 Flask 框架中的信号基于blinker,其只要就是让开发者可以在flak请求过程中制定一些用户行为 安装:pip3 install blinker 内置信号 request_started ...
- golang "%p"学习记录随笔
对于获取slice的指针地址, 通过unsafe.Pointer 和 "%p"占位符两种方式得到的地址是不同的 s := make([]int, 1) t.Log(unsafe.P ...
- Eclipse安装AmaterasUML插件问题
为了画UML图,我想在Eclipse(版本Version: Oxygen Release (4.7.0))安装AmaterasUML,第一步,安装GEF - http://download.eclip ...