首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Scala教程系列
程序那些事
创建于2021-08-26
订阅专栏
Scala教程系列
等 4 人订阅
共17篇文章
创建于2021-08-26
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Scala的Higher-Kinded类型
Higher-Kinded从字面意思上看是更高级的分类,也就是更高一级的抽象。我们先看个例子。 接下来我们在Add的伴生类中定义两个隐式实例,一个Add[Int], 一个Add[(Int,Int)]。 这两个隐式实例分别为Add[Int], 一个Add[(Int,Int)]实现…
Scala的存在类型
存在类型也叫existential type,是对类型做抽象的一种方法。可以在你不知道具体类型的情况下,就断言该类型存在。 存在类型用_来表示,你可以把它看成java中的?。 上面的表格以常用的Seq为例,列举了存在类型的例子。 如果我们有一个List[A],我们需要两个版本的…
Scala的自定义类型标记
Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry martini...好像黑夜中的萤火虫,那么耀眼,那么出众。 好了言归正传,这一篇文章我们会讲一下Scala中的自定义类型标记,通过自定义类型标记可以将this指向额外的类型期望。 分析下上面的例子,我…
scala教程之:可见性规则
和java很类似,scala也有自己的可见性规则,不同的是scala只有private和protected关键字,没有public关键字,同时scala还提供了更加细粒度的访问控制如protected[scope]和private[scope]。 scala中默认的访问权限就是…
Scala教程之:深入理解协变和逆变
在之前的文章中我们简单的介绍过scala中的协变和逆变,我们使用+ 来表示协变类型;使用-表示逆变类型;非转化类型不需要添加标记。 假如我们定义一个class C[+A] {} ,这里A的类型参数是协变的,这就意味着在方法需要参数是C[AnyRef]的时候,我们可以是用C[St…
Scala教程之:Either
在之前的文章中我们提到了Option,scala中Option表示存在0或者1个元素,如果在处理异常的时候Option就会有很大的限制,因为Option如果返回None,那么我并不知道具体的异常到底是什么,这样scala引入了Either。 顾名思意,Either表示或者是这一…
Scala教程之:可变和不变集合
集合在程序中是非常有用的,只有用好集合才能真正感受到该语言的魅力。在scala中集合主要在三个包里面:scala.collection, scala.collection.immutable和scala.collection.mutable。 scala中引入不可变集合是为了方…
Scala教程之:Future和Promise
在scala中可以方便的实现异步操作,这里是通过Future来实现的,和java中的Future很相似,但是功能更加强大。 注意这里需要引入scala.concurrent.ExecutionContext.Implicits.global, 它会提供一个默认的线程池来异步执行…
Scala教程之:PartialFunction
Scala中有一个很有用的traits叫PartialFunction,我看了下别人的翻译叫做偏函数,但是我觉得部分函数更加确切。 那么PartialFunction是做什么用的呢?简单点说PartialFunction用在模式匹配中,是一个不完整的函数,它只实现了函数的部分功…
Scala教程之:Enumeration
知道如何设置Enum的值后,我们就可以尝试创建一个Enum了。 上面的例子中,我们创建了一个Enum,并且设置了几个值。
Scala教程之:Option-Some-None
在java 8中,为了避免NullPointerException,引入了Option,在Scala中也有同样的用法。他们就是Option, Some 和None. 其中Option是一个抽象类。 可以看到Some是一个继承了Option的case class。 而None是一…
Scala教程之:scala的参数
在Scala中,可以给参数提供默认值,这样在调用的时候可以忽略这些具有默认值的参数。 注意使用命名参数时,顺序是可以重新排列的。 但是,如果某些参数被命名了,而其他参数没有,则未命名的参数要按照其方法签名中的参数顺序放在前面。
Scala教程之:可扩展的scala
隐式类是在scala 2.10中引入的,隐式类指的是用implicit关键字修饰的类。在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换。 这里我们定义了一个隐式类IntWithTimes, 它有一个接收Int类型的构造函数,和一个times方法。那么当我们将这个类…
Scala教程之:静态类型
通过这些特性,为安全可重用的编程抽象以及类型安全的扩展提供了强大的基础。 和java一样,Scala也有泛型的概念,在scala里面泛型是使用方括号 [] 来接受类型参数的。通常使用字母A来作为参数标志符,当然你也可以使用其他任意的参数名称。 要使用一个泛类型,将一个具体的类型…
Scala教程之:函数式的Scala
高阶函数通常来讲就是函数的函数,也就是说函数的输出参数是函数或者函数的返回结果是函数。在Scala中函数是一等公民。 map接收一个函数为参数。所以map是一个高阶函数,map也可直接接收一个匿名函数,如下所示: 在这个例子中,方法convertCtoF被传入forecastI…
Scala教程之:Scala基础
这篇文章我们大概过一下Scala的基础概念,后面的文章我们会有更详细的讲解Scala的具体内容。 变量和常量相比可以重新赋值,变量可以用var来定义。 在scala中,代码块用{}表示,在代码块中最后一个表达式的结果就是整个块的结果,可以作为返回值来使用。 Scala的函数和j…
Scala教程之:面向对象的scala
我们知道Scala是一种JVM语言,可以合java无缝衔接,这也就大大的扩展了scala的应用范围,大数据里面有名的spark就是使用scala编写的,那么scala到底有什么奥秘和特性呢?我们一一来揭秘。 下面我们分别的说明他们各自的特定。 我们可以看到Any是所有类型的父类…