Scala
文章平均质量分 50
吃鱼的羊
这个作者很懒,什么都没留下…
展开
-
IntelliJ IDEA如何设置条件断点
https://jingyan.baidu.com/article/5225f26ba91ff1e6fa090812.html我们在调试代码的过程中经常会碰到很多次循环或递归过程中某次出现异常,那么这个时候条件断点就非常有用了,它允许我们设置断点进入的条件,非常方便的断点到某次特点条件的异常,本文演示IntelliJ IDEA如何设置条件断点 工具/原料IntelliJ...转载 2018-08-02 10:04:52 · 875 阅读 · 0 评论 -
scala参数化字段
重载方法和字段统一访问原则只是Scala在对待字段和方法方面比Java更统一的一个方面。另一个差异是Scala里,字段和方法属于相同的命名空间。这使得字段重载无参数方法成为可能。比如说,你可以改变类ArrayElement中contents的实现,从一个方法变为一个字段,而无需修改类Element中contents的抽象方法定义,如展示在代码10.4中的那样:class ArrayElement(...转载 2018-07-13 10:48:51 · 637 阅读 · 0 评论 -
scala中集合的交集、并集、差集
scala中有一些api设计的很人性化,集合的这几个操作是个代表:交集:scala> Set(1,2,3) & Set(2,4) // &方法等同于interset方法scala> Set(1,2,3) intersect Set(2,4)并集:scala> Set(1,2,3) ++ Set(2,4)scala> Set(1,2...转载 2018-07-24 16:14:39 · 3166 阅读 · 0 评论 -
Scala注解详解
https://blog.csdn.net/qq_39532946/article/details/77770576什么是注解: 就是scala 编译器,就可以在编译的时候,注解有一些特殊的操作。 scala 中,有哪些地方可以添加注解? scala中,可以给类,方法,fields、local variable、constructor / method / functions param...转载 2018-07-19 08:19:21 · 1210 阅读 · 0 评论 -
Scala——构造函数
Scala的构造函数分为主构造函数和辅助构造函数。辅助构造函数辅助构造函数比较容易理解,它们同C++和Java的构造函数十分类似,只有两处不同:1、辅助构造函数的名称为this,这主要是考虑到在C++和Java中,构造函数名与类名同名,当更改类名时需要同时修改构造函数名,因此使用this为构造函数名使程序可靠性更强;2、每一个辅助构造函数都必须以一个对先前已定义的其他辅助构造函数或...转载 2018-07-24 13:56:47 · 19883 阅读 · 1 评论 -
学习Scala:Scala中的字段和方法
本文基于class字节码来分析在Scala语言中, 一个类中的字段和方法是如何实现的, 并且对比和java实现方式的区别。 首先看一段简单的源码: class FieldMethodTest{ private var i = 0private val j = 0 def add() : Int = i + j } 这个类很简单,...转载 2018-07-24 13:26:06 · 441 阅读 · 0 评论 -
学习Scala:伴生对象的实现原理
在上一篇关于Scala的文章 学习Scala:孤立对象的实现原理 中, 主要分析了孤立对象是如何实现的。 首先回顾一下。 孤立对象是只有一个object关键字修饰的对象。 该对象会编译成两个class文件, 一个是以孤立对象的名字命名的class, 一个是以孤立对象的名字后面加上一个$字符命名的class, 这个class又叫做虚构类。 源码中的孤立对象中的字段和方法, 都被编译成以孤立对...转载 2018-07-24 13:14:23 · 191 阅读 · 0 评论 -
学习Scala:孤立对象的实现原理
在关于Scala的第一篇文章 学习Scala:从HelloWorld开始 中, 我们讲述了Scala的HelloWorld程序的执行原理。在Scala中,程序的入口使用孤立对象来实现, 在这篇博客中, 我们讲述了孤立对象是如何实现程序入口的, 不管Scala和Java的语法差别多大, 只要能以一定的方式实现标准的class文件入口类和入口函数, 就能被JVM执行。感兴趣的读者可以移步这篇博客。 ...转载 2018-07-24 12:59:56 · 300 阅读 · 0 评论 -
学习Scala:从HelloWorld开始
前言 最近在学习Scala语言,虽然还没有完全学通, 但是隐约可以体会到Scala的简洁和强大。 它既能让程序员使用函数式编程, 也提供了全面的面向对象编程。 在刚刚开始读《Scala编程》的时候, 刚读了几页, 我就被Scala语言吸引住了, 所以就一直读下去。 在学习的过程中, 也会有一些感悟, 对于一些原理, 也会尽量搞明白。 所以打算一边学习, 一边写博客, 虽然目前还没有深入, ...转载 2018-07-24 12:45:41 · 458 阅读 · 0 评论 -
scala 中Type与Class初步学习
由于在scala中非常强调泛型或者说类型系统 ,Java和scala是基于jvm的,java1.5以前具体对象的类型与class一一对应,后来引入泛型,如字符串数组或整数数组,都是数组 ,但其实类型是不一样的,在虚拟机内部,并不关心泛型或类型系统。对泛型支持是基于运行时角度考虑的,在虚拟机中泛型被编译运行时是被擦除的, 在运行时泛型是通过反射方式获取。一、type 与 class 概念的区别sca...转载 2018-07-12 18:58:11 · 3023 阅读 · 0 评论 -
【Scala】单例对象与伴生对象
Scala的单例对象Scala不能定义静态成员,而是代之定义单例对象(singleton object)。以object关键字定义。对象定义了某个类的单个实例,包含了你想要的特性:object Accounts{ private var lastNumber = 0 def newUniqueNumber() = { lastNumber += 1; lastNumbe...转载 2018-07-24 10:36:10 · 969 阅读 · 0 评论 -
快学Scala----注解
本章要点你可以为类、方法、字段、局部变量、参数、表达式、类型参数以及各种类型定义添加注解。 对于表达式和类型,注解跟在被注解的条目之后 注解的形式有: @Annotation、 @Annotation(value) 或 @Annotation(namel = value, …) @volatitle、 @transient、 @strictfp 和 @native 分别生成等效的Java...转载 2018-07-18 15:03:19 · 342 阅读 · 0 评论 -
scala apply用法
Scala比Java更面向对象的一个方面是Scala没有静态成员。替代品是,Scala有单例对象:singleton object。当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员。定义单例对象不是定义类...转载 2018-07-13 15:48:01 · 2468 阅读 · 1 评论 -
scala中的apply方法与unapply方法
1.apply方法当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖。请看下面一个简单的例子:class Foo(foo: String) {}object Foo { def apply(foo: String) : Foo = { new Foo(foo) }}12345678定义了一个Foo类,并且在这个类中,有一个伴生对...转载 2018-07-13 15:48:49 · 741 阅读 · 1 评论 -
使用play框架来解析json字符串
参考:https://playframework.com/documentation/2.1.x/ScalaJson#json-data-typeshttps://blog.csdn.net/liuhui_306/article/details/51777471因为最近在编写scala程序,就发现了使用play框架来方便的解析json数据。一. 官网的解释是这样的:1. 解析...转载 2018-08-10 10:15:38 · 1870 阅读 · 0 评论 -
利用JEXL实现动态表达式编译
背景做项目突然遇到这样的需求: 系统要获取多个数据源的数据,并进行处理,最后输出多个字段。字段的计算规则一般是简单的取值最多加一点条件判断。 而且需要动态变动!!例如一个字段a的取值,如果a > 10的时候输出10,a <= 10则输出a。这里的10可能在一天后改成8,也可能在后天就改成了12。当然,如果只是一个数字的变动还好说,我们可以使用数据库进行存储。但是,万一哪天需...转载 2018-08-01 10:08:27 · 1718 阅读 · 0 评论 -
com.typesafe.config加载任意位置的配置文件
typesafe下的config包可以用来读取配置文件,支持多种形式。参考:https://github.com/typesafehub/config但是,若使用 ConfigFactory.load()加载配置文件,只能加载src/main/resources目录下的application.conf文件,不够灵活。 通过研究发现,可以使用 val c = Co...转载 2018-07-31 09:59:45 · 6235 阅读 · 0 评论 -
Scala集合精粹(实现特质Like)
Controlling complexity is the essence of computer programming. -- Brian Kernigan.当我第一次阅读Scala集合框架源代码时,众多的特质,类型参数,隐式参数,类型约束扑朔迷离,很难摸清框架设计的精髓。例如TraversableLike.map方法声明:def map[B, That](f: A =>...转载 2018-07-27 09:29:59 · 1166 阅读 · 0 评论 -
Scala之偏函数Partial Function
本文原文出处: http://blog.csdn.net/bluishglc/article/details/50995939 严禁任何形式的转载,否则将委托CSDN官方维护权益!从使用case语句构造匿名函数谈起在Scala里,我们可以使用case语句来创建一个匿名函数(函数字面量),这有别于一般的匿名函数创建方法。来看个例子:scala> List(1,2,3) map {case i:...转载 2018-07-13 17:45:07 · 466 阅读 · 0 评论 -
Range
Range 是 Scala 中一个常用的特性,具有以下特点:支持 to 及 until,to 包含边界上限,until 不包含边界上限(两者均包含边界下限)支持 Int、Long、Float、Double、Char、BigInt、BigDecimal支持自定义步长及默认步长接下来我们通过几个例子来加深对这几个特性的印象支持 to 及 untilscala> 1 to 10res2: sca...转载 2018-07-13 17:20:11 · 898 阅读 · 0 评论 -
apply, update 语法糖
语法糖,又称为糖衣语法,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说可以增加程序的可读性,从而减少程度代码出错的机会。接下来就会介绍两个 Scala 中的语法糖。在 Scala 中,如果我们要频繁调用某个 class 或 object 的方法,我们可以通过定义 apply 方法来避免每次写出该函数的调用,而使用一种更加简洁的方式,来看下面的例子:不使...转载 2018-07-13 17:14:03 · 765 阅读 · 0 评论 -
scala之case class 和case object
首先我们我们对case class 和case object类型对象进行反编译首先来编译 case class,有如下编译内容:case class Person(age:Int,name:String)它会产生两个文件如下:Person.class的编译内容如下:import scala.Function1;import scala.Option;import scala.Product;...转载 2018-07-13 17:06:18 · 5530 阅读 · 0 评论 -
scala里的模式匹配和Case Class
模式匹配的简介 scala语言里的模式匹配可以看作是java语言中switch语句的改进。 模式匹配的类型 包括:常量模式、变量模式、构造器模式、序列模式、元组模式以及变量绑定模式等。 常量模式匹配 常量模式匹配,就是在模式匹配中匹配常量啦。objectConstantPattern{ def main(args:Array[String]) :Unit = { //模式匹配结果作...转载 2018-07-13 17:00:44 · 665 阅读 · 0 评论 -
Scala case class那些你不知道的知识
本文将基于下面这个简单的例子来说明 case classcase class Person( lastname: String, firstname: String, birthYear: Int )你可能知道的知识当你声明了一个 case class,Scala 编译器为你做了这些:创建 case class 和它的伴生 object实现了 apply 方法让你不需要通过 new 来创建类实例...转载 2018-07-13 17:00:04 · 11923 阅读 · 0 评论 -
Scala之Case Class
Case Class的特别之处在于:编译器会为Case Class自动生成以下方法: equals & hashCodetoStringcopy编译器会为Case Class自动生成伴生对象编译器会为伴生对象自动生成以下方法applyunapply 这意味着你可以不必使用new关键字来实例化一个case class.case class的类参数在不指定val/var修饰时,会自动编译为va...转载 2018-07-13 16:58:48 · 275 阅读 · 0 评论 -
让你彻底明白JAVA中堆与栈的区别
简单的说: Java把内存划分成两种:一种是栈内存,一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由...转载 2018-07-18 14:18:52 · 1708 阅读 · 0 评论 -
JAVA中的栈和堆
JAVA在程序运行时,在内存中划分5片空间进行数据的存储。分别是:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。基本,栈stack和堆heap这两个概念很重要,不了解清楚,后面就不用学了。以下是这几天栈和堆的学习记录和心得。得些记录下来。以后有学到新的,会慢慢补充。 一、先说一下最基本的要点基本数据类型、局部变量都是存放在栈内存中的,用完就消失。new创建的实例化对...转载 2018-07-18 13:37:22 · 292 阅读 · 0 评论 -
JAVA中分为基本数据类型及引用数据类型
一、基本数据类型:byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0long:长整型,在内存中占64位,即8个字节...转载 2018-07-18 13:02:27 · 370 阅读 · 0 评论 -
scala类型系统:this别名&自身类型
看scala的源码的话很发现很多源码开头都有一句:self => 这句相当于给this起了一个别名为selfclass A { self => //this别名 val x=2 def foo = self.x + this.x }self不是关键字,可以用除了this外的任何名字命名(除关键字)。就上面的代码,在A内部,可以用this指代当...转载 2018-07-17 10:48:52 · 1498 阅读 · 1 评论 -
implicitly[Ordering[T]]
一般来说 Implicit 主要用在两个方面:隐式转换和隐式参数,下面分别进行讲解隐式转换隐式转换到某个期望类型任何时候编译器发现了类型 X,但是却需要类型 Y 的时候,它就会寻找一个可以把 X 转换成 Y 的隐式函数。例如正常情况下一个 Double 类型是不能转换成 Int 类型,但是我们可以定义一个隐式函数来实现:scala> implicit def doubleToInt(x: D...转载 2018-07-10 18:58:15 · 625 阅读 · 0 评论 -
Scala 隐式转换
什么是隐式转换我们经常引入第三方库,但当我们想要扩展新功能的时候通常是很不方便的,因为我们不能直接修改其代码。scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题。Scala中的隐式转换是一种非常强大的代码查找机制。当函数、构造器调用缺少参数或者某一实例调用了其他类型的方法导致编译不通过时,编译器会尝试搜索一些特定的区域,尝试使编译通过。场景一,现在我们要为Java的File类提供一个获...转载 2018-07-10 18:48:08 · 189 阅读 · 0 评论 -
深入理解Scala中的隐式转换系统
博客核心内容: 1、Scala中的两种隐式转换机制以及隐式视图的定义方式 2、Scala中的隐式绑定可能所处的位置以及如何更好的使用隐式转换 3、Scala中的隐式转换相关操作规则 4、Scala中的隐式参数 5、Scala中的隐式类 6、Scala中的隐式对象 7、Scala中的两种隐式类型约束(结合Scala中的类型系统) 8、Predef类中的implicitly方法的用法介绍以及Order...转载 2018-07-10 18:47:15 · 3772 阅读 · 2 评论 -
Scala教程:高级类型
这个章节的内容包含:视图边界(“类型类”)其他类型边界高度类型化的类型&临时多态F-bounded多态/可递归类型结构化的类型抽象类型的成员类型擦除和Manifest实例学习:Finagle视图边界(“类型类”)有时候你并不需要指定一个类型等价于另外一个类型,或者是它的子类或者父类,如果那样做的话,你可能会和类型转换搞混淆。视图边界定义了可以“看作”是另一个类型的一种类型。这个对于需要“读...转载 2018-07-16 15:04:31 · 869 阅读 · 0 评论 -
Scala中TypeTags和Manifests的用法
Scala运行在JVM上,在JVM上有一种机制叫做类型擦除(type eraser)。类型擦除是说:在语言的编译阶段程序中所携带的泛型信息都会被擦除,最终生成的class文件中是不包含类型信息的。所以scala 2.8中引入了Manifests类来解决构建Array时遇到的一些问题。然而引入的Manifests并不完美,对于路径依赖类型,它拿到的信息是不精确的。所以后续引入了TypeTags。展示...转载 2018-07-16 14:27:59 · 862 阅读 · 0 评论 -
Type与Class、ClassTag与TypeTag
Scala中获取Class的方式:scala> class Adefined class Ascala> val a = new Aa: A = A@17a1e4cascala> a.getClassres10: Class[_ <: A] = class Ascala> classOf[A]res11: Class[A] = class A ...转载 2018-07-16 13:58:53 · 1972 阅读 · 0 评论 -
说说尾递归
微博上看到有人在讨论尾递归,想起以前曾看过老赵写的一篇相关的博客,介绍的比较详细了,相信很多人都看过,我也在下面留了言,但挑了个刺,表示文章在关键点上一带而过了,老赵自然是懂的,但看的人如果不深入思考,未必真正的明白,下面我说说我的理解。什么是尾递归什么是尾递归呢?(tail recursion), 顾名思议,就是一种“不一样的”递归,说到它的不一样,就得先说说一般的递归。对于一般的递归,...转载 2018-07-16 13:45:29 · 215 阅读 · 0 评论 -
Scala基础 - 柯里化(Currying)及其应用
1. 介绍柯里化(currying, 以逻辑学家Haskell Brooks Curry的名字命名)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数作为参数的函数。 在Scala中方法和函数有细微的差别,通常编译器会自动完成方法到函数的转换。如果想了解Scala方法和函数的具体区别,请参考博文Scala基础 - 函数和方法的区别。2. Scala中柯...转载 2018-07-16 11:37:19 · 385 阅读 · 0 评论 -
Scala学习笔记(六) Scala的偏函数和偏应用函数
1. 偏函数偏函数(Partial Function),是一个数学概念它不是"函数"的一种, 它跟函数是平行的概念。Scala中的Partia Function是一个Trait,其的类型为PartialFunction[A,B],其中接收一个类型为A的参数,返回一个类型为B的结果。举个例子scala> val pf:PartialFunction[Int,String] = { ...转载 2018-07-16 11:17:13 · 1424 阅读 · 0 评论 -
scala基础之泛型详解
https://blog.csdn.net/zhanglh046/article/details/72845897在Scala中你可以使用类型参数来实现类和函数,这样的类和函数可以用于多种类型。比如Array[T] 你可以存放任意指定类型T的数据.类、特质、函数都可以有类型参数;将类型参数放在名字后面用方括号括起来 一 泛型类1.1Java 实现public class Animals<A,...转载 2018-06-19 15:01:26 · 437 阅读 · 0 评论 -
Scala学习笔记--上界、视图界定、上下文界定
上界 下界 视界object Test{ def main(args:Array[String]):Unit={ def mulBy(factor:Double)=(x:Double)=>factor*x val triple =mulBy(3); println(triple(10)) println(mulBy(3)(5)) va...转载 2018-07-17 11:05:45 · 738 阅读 · 0 评论