scala学习笔记2
一、算术和操作符重载
a + b
是如下方法的简写:
a.+(b)
在scala中你可以使用任何符号来为方法命名。比如BigInt类就定义了一个/%的方法,该方法返回一个对偶,对偶的内容是除法操作得到的商和余数。
通常来说,你可以用
a 方法 b
作为以下代码的简写
a.方法(b)
这里的方法是一个带有两个参数的方法(一个隐式的和一个显示的)。例如1.to(10)可以简写成1 to 10
scala语言并没有提供++和--操作符,我们需要使用+=1和-=1
scala认为Int类是不可变的。
对于BigInt和BigDecimal对象,你可以以常规的方式使用那些数学操作符:
scala> val x:BigInt = 1234567890
x: BigInt = 1234567890 scala> x*x*x
res0: scala.math.BigInt = 1881676371789154860897069000
在java中这样的操作要写成x.multiply(x).multiply(x)
二、函数和方法
相比java,在scala中使用函数更为方便,你不需要从某个类调用它的静态方法
scala> import scala.math._ //在scala中,_是通配符,类似java的*
import scala.math._ scala> sqrt(2)
res3: Double = 1.4142135623730951 scala> pow(2,4)
res4: Double = 16.0
使用scala.开头的包时,我们可以省去scala前缀。例如import math._等同于import scala.math._ 而math.aqrt(2)等同于scala.math.sqrt(2)
通常一个类对应有一个伴生对象(companion object),其方法就跟java中的静态方法一样。
举例来说,BigInt类的BigInt伴生对象有一个生成指定位数随机素数的方法probablePrime:
scala> BigInt.probablePrime(100,scala.util.Random)
res6: scala.math.BigInt = 988540475240285093287416884009
这里的Random是一个单例的随机数生成器对象,而该对象是在scala.util表中定义的。这是用单例对象比用类更好的为数不多的场景之一。在java中,为每个随机数都构造出一个新的java.util.Random对象是一个常见的错误。
不带参数的scala方法通常不使用括号。一般来讲,没有参数且不改变当前对象的方法不带圆括号。
三、apply方法
scala> "hello"(4)
res7: Char = o
背后实现的原理是一个名为apply的方法。
也就是说
"hello"(4)是如下语句的简写:
"hello".apply(4)
BigInt伴生对象有将字符串或者数字转换为BigInt对象的apply方法
scala> BigInt("11113465684")
res8: scala.math.BigInt = 11113465684
像这样使用伴生对象的apply方法是scala中构建对象的常用手法。
例如
Array(1,4,9)返回是一个数组,用的就是Array伴生对象的apply方法。
scala学习笔记2的更多相关文章
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- 原创:Scala学习笔记(不断更新)
Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/w ...
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...
- scala学习笔记
一 入门 为了增加编程趣味和技能,学习新语言,体会函数式编程和简易的并发管理模型,了解日渐活跃的Spark,尝试下Scala.Scala = Scalable language,作者是Martin O ...
- Scala学习笔记1(安装)
到 官网下载scala tar包 http://www.scala-lang.org/download/ mac Finder里双击解压. 改名成scala 进命令行, mv ~/Downloads ...
随机推荐
- ajax 如何实现页面跳转
老师,您好.jquery的ajax如何实现页面跳转?例如:登陆页面属于用户名和密码后,点击登陆,验证用户名和密码,正确后,跳转到其他页面.能否给个例子. 下面列了五个例子来详细说明,这几个例子的主要功 ...
- 组播(Multicast)传输
组播(Multicast)传输: 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥 ...
- sql查询,如何增加一列
select * from (select 'finish_order_info' as table_name,count(1)as num from fraudorder.finish_order_ ...
- 菜鸟-手把手教你把Acegi应用到实际项目中(11)-切换用户
在某些应用场合中,我们可能需要用到切换用户的功能,从而以另一用户的身份进行相关操作.这一点类似于在Linux系统中,用su命令切换到另一用户进行相关操作. 既然实际应用中有这种场合,那么我们 ...
- OC基础(26)
集合对象的内存管理 Copy copy与内存管理 @property中的copy关键字 自定义的类实现copy操作 *:first-child { margin-top: 0 !important; ...
- 剑指Offer:面试题16——反转链表(java实现)
问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...
- Laxcus大数据管理系统2.0(11)- 第九章 容错
第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就 ...
- 软件测试入门——测试模型(V型 W型 H型)
软件测试工程师称为“QA”,质量保证者——这是入门的第一点要学习的. 首先看基本的测试模型 1.“V”型 特点:[活动串行]这是一种古老的瀑布模型,反映了实际和测试之间的关系. 局限:仅仅把测试过程作 ...
- 刻意练习,逃离舒适区——怎么样成为一个高手[罗辑思维]No.183_知识笔记
2016/10/30 14:31:32 一.对事物的见解分为两类: 1.评论性的见解 说的内容都是对的,符合常理的,但是却是不解决问题的. ...
- Tomcat源码分析——SERVER.XML文件的加载与解析
前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...