Scala
文章平均质量分 76
pageniao
这个作者很懒,什么都没留下…
展开
-
并发编程(待补充)
Scala的actor提供了一种基于事件的轻量级线程。只要使用scala.actors.Actor伴生对象的actor()方法,就可以创建一个actor。它接受一个函数值/闭包做参数,一创建好就开始运行。用!()方法给actor发消息,用receive()方法从actor接收消息。receive()也可以闭包为参数,通常用模式匹配处理接收到的消息。我们看个例子,假定我们需要判定一个给定的数是完全数: def sumOfFactors(number: Int) = { (0 /: (原创 2021-07-03 15:14:34 · 70 阅读 · 0 评论 -
Scala模式匹配提取器(extracter)+正则表达式+正则表达式提取器
提取器会从输入中提取出匹配的部分。假定我们在写一个服务,处理股票相关的输入。对我们来说,手头的第一个工作就是接收股票代码,返回这个股票的价格(为了演示,这里打印出结果)。process()方法需要校验给定的代码是否有效,如果有效,则返回其股价。代码如下:object Symbol { def unapply(symbol: String): Boolean = symbol == "GOOD" || symbol == "IBM"}object StockService { def原创 2021-07-02 10:32:33 · 836 阅读 · 0 评论 -
Trait和类型转换
1. TraitTrait是指可以混入或融入一个类层次结构的行为。比如说,先对Friend建模,然后将其混入任何类:Men、Women、Dog等,而不用让它们都从一个公共的基类继承下来。假定我们已经建模出Human,现在,想让它成为朋友。朋友是能够倾听你说话的人。所以,我们要给Human类增加一个listen方法,下面是:class Human(val name: String) { def listen() = println("Your friend " + name + " is lis原创 2021-07-01 11:29:09 · 151 阅读 · 0 评论 -
Execute Around Method(用完对象后立刻释放)+偏应用函数+闭包
1. Execute Around Method(用完对象后立刻释放)在Java中,进入synchronized块时,会获得给定对象的监视器(锁)。离开此块时,这个监视器会自动释放。即便是块里的代码抛出未处理的异常,也不会影响到释放。这种确定性行为非常好。相比于Java,Scala里实现这些构造相当容易。看下面例子:假如有个类Resource,需要自动开启食物,在用完对象之后,就要显式地结束事物。正确的启动事物可以依赖构造函数,而实现终结部分却有些棘手。这就落入Execute Around Metho原创 2021-06-30 09:57:52 · 175 阅读 · 1 评论 -
Scala的Protected、Private等修饰符
1. Protected在Scala里,用protected修饰的成员只对本类及派生类可见。同一个包里的其他类无法访问这些成员。而且,派生类只可以访问本类内的protected成员。示例:package automobilesclass Vehicle { protected def checkEngine(){}}class Car extends Vehicle{ def start(){checkEngine()/*OK*/} //从派生类Car的实例方法访问原创 2021-06-29 09:39:17 · 832 阅读 · 0 评论 -
Scala类的介绍
1. 简单类和无参方法Scala类最简单的形式看上去和Java或C++中很相似:class Counter { private var value = 0 // 必须初始化字段 def incremet() { // 方法默认是公有的 value += 1 } def current() = value}在Scala中,类并不声明为public。Scala源文件可以包含多个类,所有这些类都具有公有可见性。使用该类需要做的就是构造对象并按照通常的原创 2021-02-10 21:26:22 · 587 阅读 · 0 评论 -
Scala语言基础(九)函数式编程(一)高阶函数
函数和方法的参数问题函数和方法当做函数或方法的参数object MTest01 { def main(args: Array[String]): Unit = { //传入函数f2 println(m2(5,6,f2)) //传入方法,这个方法会被转换成函数 println(m2(5,6,m1)) //将方法转换成函数 val ff3 = m...原创 2020-06-01 22:12:31 · 221 阅读 · 0 评论 -
第三部分 Scala学习:函数式编程
一、Scala函数的创建def main(args: Array[String]): Unit = { // 无参 无返回值 def test():Unit={ println("你好!") } // 调用函数 test() // 无参有返回值 ...原创 2020-05-27 22:30:53 · 147 阅读 · 0 评论 -
第一部分 Scala 学习
第01章 Scala概述1. Scala快速开发入门Scala源文件以 “.scala" 为扩展名ala程序的执行入口是main()函数Scala语言严格区分大小写。Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后自动加分号),这也体现出Scala的简洁性。如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号(尽量一行就...原创 2020-05-23 19:49:22 · 800 阅读 · 0 评论 -
idea创建使用maven创建Scala项目时遇到的问题
问题描述:idea创建使用maven创建Scala项目时没有src文件解决方法是:在创建maven项目时添加系统参数铺垫:idea已经配置maven,如下图所示1----maven的安装路径2----maven的安装路下的设置文件3----这是默认在2所指文件中指定的maven的本地仓库地址2中设置maven本地仓库地址如下图具体操作如图所示:1.选择使用maven工具...原创 2020-02-21 09:25:53 · 946 阅读 · 0 评论 -
Scala语言基础(八)模式匹配
简单的模式匹配匹配值import scala.util.Randomobject MatchTest { def main(args: Array[String]): Unit = { val array = Array(1,2,3,4,5,6) val r = new Random() val index= r.nextInt(array.length) ...原创 2019-11-03 16:20:59 · 155 阅读 · 0 评论 -
Scala语言基础(七)trait
特质(trait)的定义Scala和Java语言一样,使用很强的限制策略,避免了多继承的问题。在Java语言中,只允许继承一个超类,但可以实现多个接口,但Java接口中有其自身的局限性:接口中只能包含抽象方法,不能包含具体方法,包含的字段是常量 。Scala语言利用trait解决了该问题,在Scala的trait中,不单可以包含抽象方法还可以包含字段和具体方法。trait Animal01 {...原创 2019-11-03 13:58:34 · 188 阅读 · 0 评论 -
Scala语言基础(六)抽象类和继承成
抽象类概念抽象类是一种不能被实例化的类,抽象类中包括了若干不能完整定义的方法,这些方法有子类去扩展定义自己的实现。1,如果在父类中,有某些方法不能立即实现,而需要依赖不同子类来覆盖,重写实现自己的不同方法实现,此时可以将父类中的这些方法不给出具体实现,只有方法签名,这种方法就是抽象方法。2,而一个类中如果有一个抽象方法,name类就必须用abstract来声明为抽象方类,此时抽象类是不可以实...原创 2019-11-03 09:36:37 · 141 阅读 · 0 评论 -
Scala语言基础(五)apply方法
applay内部实现定义一个数组val array1 = Array(1,2,3,4,5,6,7,8,9)由源码可以知道,上面定义的数组调用了apply方法,内部同样也new了一个数组,然后通过迭代将值赋给定义的数组,这样就省去了我们一个一个的为数组赋值了def apply(x: Int, xs: Int*): Array[Int] = { val array = new Arr...原创 2019-11-03 09:04:27 · 257 阅读 · 0 评论 -
Scala语言基础(四)面向对象(二)单例对象、伴生对象
单例对象、对象的比较1object ObjectTest { def main(args: Array[String]): Unit = { //如果属性和方法定义在object组件中,就可以直接使用类型名称访问 //和java中的static语法一致 println(ObjectTest11.id) println(ObjectTest11.m1(3))...原创 2019-11-02 22:20:30 · 229 阅读 · 0 评论 -
Scala语言基础(四)面向对象(一)定义类、定义构造器
面向对象重要的两个概念类:相同的事物组成的一个类或裙(抽象概念:描述一类相同的事物)对象:一个类或群体里的单个实体面向对象的四大特征抽象,封装,继承,多态构建实例对象的五种方法:1,调用构造器(公开)2,静态工厂方法(构造器私有)3,反射4,克隆(object.clone())5,反序列化定义类//伴生类class Student{ /** * 1,在scal...原创 2019-11-02 17:39:28 · 532 阅读 · 0 评论 -
Scala语言基础(三)练习
(1)打印九九乘法表object MutilTable { def main(args: Array[String]): Unit = { for(i <- 1 to 9){ for(j <- 1 to i){ print(j +"*"+i + "=" + i*j +"\t") } println() } }...原创 2019-11-02 15:40:32 · 387 阅读 · 0 评论 -
Scala语言基础(二)集合
Scala中的数组Scala中数组按是否定长分为定长数组和变长数组定长数组元素个数确定,只能修改元素,不支持增加删除元素;object ArrayTest01 { def main(args: Array[String]): Unit = { //定义定长数组 val a = new Array[Int](10)//对应Java int[] a = new int[1...原创 2019-11-02 11:02:18 · 240 阅读 · 0 评论 -
Scala语言基础(一)
ScalaScala的Hello World1. cala类及方法的定义object HelloWorld {//object 定义了一个HelloWorld /** * def用于定义方法main(), * 其参数名称是args,参数是一个数组Array * 它是一个String类型的数组,String是泛型, * Unit代表无返回值,相当于Java的void...原创 2019-10-31 09:31:40 · 340 阅读 · 0 评论