Scala学习笔记(一)

Scala学习笔记(一)

一、变量

获取变量的值是一个耗时的工作时,可以考虑使用lazy var.

lazy val forLater = someTimeConsumingOperation()

二、函数定义

“=”并不只是用来分割函数签名和函数体的,它的另一个作用是告诉编译器是否对函数的返回值进行类型推断!如果省去=,则认为函数是没有返回值的!

比如:

scala> def myFirstMethod() = { “exciting times ahead” }

myFirstMethod: ()java.lang.String

scala> def myFirstMethod(){ “exciting times ahead” }

myFirstMethod: ()Unit

三、方法调用

注:和本文的其他部分不同,该章节总结自《Learning Scala》一书:Methods and Operators一节,因为《Scala In Action》一书没有集中对这个知识点的讲解

通常,scala和其他大多数的语言一样,对方法的调用使用是:infix dot notation格式,我们可以叫“小数点中辍格式”,也就是对象和方法名中间以“小数点”做中缀的方式:

与此同时,scala还提供了另外一种方法调用方式:infix operator notation格式,我们可以叫“操作符中辍格式”,也就是把方法名当做一种操作符,使用对象 方法名 参数中间以空格分隔的方式:

这我们思考一下为什么会出现这种样式的方法调用,应该说这是用于引入了“操作符做方法名”而产生的一种自然需要!实际上,scala中允许使用操作符做方法名基本上与C++中的操作符重载是一样的!

很显然,当我们引入了操作符重载之后,如果再使用“对象.方法名(参数)”的方式调用方法会看上去非常古怪,也就是这里的d.+(2.721),此时就是使用infix operator notation样式的合适场所!

当然,这种调用样式并不是一定要使用在以操作符为方法名的方法上,如果你习惯,也可以使用在普通方法上。

四、数组以及基本操作

对于给数组赋值的语句:array(0) = “This”,这里要说明的是:不同于java中的array[0] = “This” 在scala中,[]永远是用来制定参数类型的!

迭代Array的操作是非常简单的,我们只需要使用它的foreach方法,同时传递一个函数字面量即可。下面典型的例子是在迭代main函数的args参数列表:

五、FOR循环

六、模式匹配:Pattern Matching

模式匹配,示例一:

模式匹配,示例二:

在下面的这个例子中展示了scala一些内置的预定义的Pattern,专门应用于case上的,例如下面例子中的:f,s, rest

模式匹配,示例三:

七、类 Class

What val and var do is define a field and a getter for that field, and in the case of var an additional setter method is also created. When both of them are missing, they’re treated as private instance values, not accessible to anyone outside the class.

对于Class的field的修饰符有如下约定:

使用var声明field,则该field将同时拥有getter和setter

scala> class MongoClient(var host:String, var port:Int)

使用val声明field,则该field只有getter。这意味着在初始化之后,你将无法再修改它的值。

scala> class MongoClient(val host:String, val port:Int)

如果没有任何修饰符,则该field是完全私有的。

scala> class MongoClient(host:String, port:Int)

八、构造函数

主构造函数:Primary Constructor

scala的主构造函数指的是在定义Class时声明的那个函数!简单的例子:

class MongoClient(val host:String, val port:Int)

对于这个class的定义,实际上它也是同时声明了一个构造函数:this(val host:String, val port:Int), 它就是所谓的主构造函数!

关于构造函数重载

在scala中,构造函数的重载和普通函数的重载是基本一样的,区别只是构造函数使用this关键字指代!当然,也不能指定返回值。

对于重载构造函数:它的第一个语句必须是调用另外一个重载的构造函数或者是主构造函数!当然除了主构造函数以外!这个表述如果再深入地一想,那么我们就可以想到:所有的构造函数在一开始就会首先调用主函数!!这也是为什么:scala对写在Class内的零星的脚本和代码片段的处理是通过移到主构造函数内去执行的原因!

九、scala类结构图

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109199.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【控制】人工势场法及人工势场函数「建议收藏」

    【控制】人工势场法及人工势场函数「建议收藏」人工势场法是由Khatib提出的一种机器人路径规划算法。该算法将目标和障碍物分别看做对机器人有引力和斥力的物体,机器人沿引力与斥力的合力来进行运动。该法结构简单,便于低层的实时控制,在实时避障和平滑的轨迹控制方面,得到了广泛应用,其不足在于存在局部最优解,容易产生死锁现象,因而可能使移动机器人在到达目标点之前就停留在局部最优点。From:人工势场法1.概述我们打两个比方来说明人工势场法的作用机理。首先,我们把构型空间比作一个电势场平面,机器人(的当前构型)比作空间中一点。如果让机器人的起点和障碍物

  • 部署环境什么意思_离线部署net

    部署环境什么意思_离线部署netNeokylin-Server离线环境部署Minio+keepalived集群Neokylin-Server离线环境部署Minio+keepalived集群一、说明二、部署过程:1.切换root账号或所有语句加sudo;2.关闭6个节点防火墙(或打开端口);3.设置所有节点;4.时间同步;5.3个节点创建目录与文件;6.添加权限;7.启动minio服务;8.n1-n3部署keepalived;Neokylin-Server离线环境部署Minio+keepalived集群一、说明背景:N

  • VS2017 注册

    VS2017 注册VisualStudio2017序列号Key激活码VS2017注册码VisualStudio2017(VS2017)企业版 Enterprise注册码 序列

  • datax(3): win环境cmd乱码「建议收藏」

    datax(3): win环境cmd乱码「建议收藏」通过前面两篇文章,大家应该已经可以安装成功datax,但是在win的cmd下竟然中文乱码。解决它!!!一,环境win10datax3.xcmdpy3.x二,现象运行python\xxx\datax.py\xxx\job.json后控制台乱码三,解决1,临时解决命令:chcp(更改该控制台的活动控制台代码页)过程:cmd下输入chcp65001改变当前代码页变为utf-8编码常用的编码及对应的码值(10进制):十进制码值 对应编码名称950 .

  • 什么是ESLint?「建议收藏」

    什么是ESLint?「建议收藏」在我们学习ESLint之前,我们先来了解一下什么是ESLint?什么是ESLint?官网上告诉我们,ESLint是一个用来识别ECMAScript/JavaScript并且按照规则给出报告的代码检测工具,哦,所以我们可以知道,ESLint就是一个工具,而且是一个用来检查代码的工具。代码检查是一种静态的分析,常用于寻找有问题的模式或者代码,并且不依赖于具体的编码风格。对大多数编程语言…

  • 陕西勉县旅游策划方案——打造三国之都!

    陕西勉县旅游策划方案——打造三国之都!陕西勉县旅游策划方案————打造三国之都熊大寻旅游策划公司/文陕西勉县——三国文化的集散地,以其包容与大气,为三国文化的爱好者铺排了强健的精神底色,给予了所有三国迷体验历史的自信和豪情。2009年8月,受陕西勉县县政府的邀请,熊大寻旅游策划公司和旅游规划公司来到勉县,为其城市旅游进行整体策划。熊大寻旅游策划公司和旅游规划公司在考察走访完勉县所有旅游景点,并消话完项目资料后,对勉县做出了系统…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号