Scala
贾诩是也
走过很多弯路,一直坚强、执着的眺望着远方、、、一个听着小米布斯故事成长起来的老码农。不忘初心,方得始终、、、给自己鼓劲加油,为这个时代华丽的时代喝彩!
展开
-
集合介绍
Martin Odersky和Lex Spoon在许多人眼中,新的集合框架是Scala 2.8版本中最重要的变化。斯卡拉之前有过收藏(实际上新的框架与它们基本兼容)。但只有2.8为集合类型提供了一个通用的,统一的和全面的框架。尽管第一眼看到集合的添加是微妙的,但他们在编程风格中所能引起的变化可能是深刻的。事实上,通常情况下,您好像在更高层次上工作,程序的基本构建块是整个集合而不是元素。这种新的编程...翻译 2018-02-22 20:31:02 · 190 阅读 · 0 评论 -
Scala化规则引擎
1. 引言什么是规则引擎一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑。业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技术人员使用面向对象的技术语言或脚本来定制。业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。规则引擎(rule engine)是指将复杂的业务逻辑抽象成规转载 2018-01-17 06:12:45 · 1174 阅读 · 0 评论 -
scala数据库工具类
scala的数据库连接池,基于mysqlimport java.util.concurrent.ConcurrentHashMapimport com.jolbox.bonecp.{ BoneCPConfig, BoneCP }import java.util.ResourceBundleimport java.util.LinkedListimport java.sql.Driv翻译 2018-01-17 06:12:15 · 778 阅读 · 0 评论 -
scala中注解、枚举
在学习Scala的过程中,总会碰到一些注解:// Predef.scala@inline def implicitly[T](implicit e: T) = e@deprecated("Use `sys.error(message)` instead", "2.9.0") def error(message: String): Nothing = sys.error(messa转载 2018-01-17 06:12:03 · 701 阅读 · 0 评论 -
Scala 样本类和模式匹配
样本类(case clas)和模式匹配(pattern matching),在编写规范的、无封装数据结构时会用到的构件。对于树型递归数据尤其有用。一、简单例子: 1 abstract class Expr2 case class Var(name:String) extends Expr3 case class Number(num:Double) extends Expr转载 2018-01-17 06:11:41 · 338 阅读 · 0 评论 -
Scala 中的构造器
Scala中的构造器相较于Java比较特殊,分为两种:主构造器,从构造器。主构造器是和类中字段和方法的定义混合在一起的。在Scala中,不需要像Java一样需要在类中定义一个与类名相同的方法来当作构造器。主构造器的参数列表写在类名的后面,而构造器的内容,则直接写在类定义里面,所以说,一个Scala类里面,除了方法和字段的定义以外的代码,全都是主构造器的内容。class Fruit(转载 2018-01-17 06:10:46 · 496 阅读 · 0 评论 -
Scala伴生类和伴生对象
单例对象与类同名时,这个单例对象被称为这个类的伴生对象,而这个类被称为这个单例对象的伴生类。伴生类和伴生对象要在同一个源文件中定义,伴生对象和伴生类可以互相访问其私有成员。不与伴生类同名的单例对象称为孤立对象。看看例子:12345678910111213141516171819202转载 2018-01-17 06:10:34 · 704 阅读 · 0 评论 -
Scala中=>的用法
1. 表示函数的类型(Function Type)例如:1def double(x: Int):Int = x*2函数double的类型就是 (x: Int) => Int 或者 Int => Int备注: 当函数只有一个参数的时候,函数类型里面括起来函数参数的括号是可以省略的。转载 2018-01-17 06:10:14 · 5764 阅读 · 0 评论 -
Scala--高阶函数
一、作为值的函数 import scala.math._ val num = 3.14 val func = ceil _ // _意味着确实指的是这个函数,而不是忘记了传参数 ,func是一个函数变量,内容保存的是个函数 val v = func(num) println(v) val arr = Array(1.0,3.14,4).map(func) //转载 2018-01-16 10:19:51 · 200 阅读 · 0 评论 -
scala学习7--class、object、trait
scala语言中没有static成员存在,但是scala允许以某种方式去使用static成员这个就是伴生机制,所谓伴生,就是在语言层面上,把static成员和非static成员用不同的表达方式,class和object,但双方具有相同的package和name,但是最终编译器会把他们编译到一起,这是纯粹从语法层面上的约定。通过javap可以反编译看到。另外一个小魔法就是单例,单例本质上转载 2018-01-16 10:19:29 · 175 阅读 · 0 评论 -
scala习题精选100道
1、**[primary]**关于和Scala进行交互的基本方式REPL说法错误的是? CA、R 读取(read)B、E 求值(evaluate)C、P 解析(Parse)D、L 循环(Loop)2、**[primary]**不属于Scala7种数值类型的是? DA、CharB、IntC、FloatD、LongLong3、**[p转载 2018-01-16 10:19:09 · 11931 阅读 · 3 评论 -
scala-协变、逆变、上界、下界
阅读目录Scala的协变Scala的逆变下界lower bounds上界upper boundsView Bound Context Bound参考测试源代码欢迎大家关注: scala工具库 ,里面包含各种库的测试用例和使用说明文档说明文档当我们定义一个协变类型List[A+]时,List[Child]可以是List[Parent]的子类型。当我们定义一个逆变类型L翻译 2018-01-17 06:13:11 · 230 阅读 · 0 评论 -
Scala闭包
假如我们定义如下的函数:1(x:Int)=> x + more这里我们引入一个自由变量more.它不是所定义函数的参数,而这个变量定义在函数外面,比如:1var more =1那么我们有如下的结果:123转载 2018-01-18 08:11:03 · 167 阅读 · 0 评论 -
scala的futue和promise
异步操作的有两个经典接口:Future和Promise,其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这个结果可以添加 Callback 以便在任务执行成功或失败后做出对应的操作,而 Promise 交由任务执行者,任务执行者通过 Promise 可以标记任务完成或者失败。 可以说这一套模型是很多异步非阻塞架构的基础。scala的Future表示一个异步操作的结果状态,转载 2018-01-18 08:11:12 · 712 阅读 · 0 评论 -
Scala中apply的用法
Scala中的 apply 方法有着不同的含义, 对于函数来说该方法意味着调用function本身, 以下说明摘自Programming in Scala, 3rd EditionEvery function value is an instance of some class that extends one of several FunctionN traits in package转载 2018-01-19 06:49:49 · 1068 阅读 · 0 评论 -
Scala中的空
Scala的有即Any,Scala的无是Null,null,Nil,Nothing,None,Unit.那么这几种空有什么区别呢?一、Null&null 很多人一辈子都没有走出这个无。Null是一个Trait,你不能创建她它的实例。但是Scala在语言层面上存在一个Null的实例,那就是null。Java中的null意味着引用并没有指向任何对象。但存在一个悖论,一切都是对象,那没有对象是转载 2018-01-19 06:48:53 · 682 阅读 · 0 评论 -
scala json相关操作
一、前言 目前准备编写一个scala项目基础类库,有这样一个需求,将String类型的Json转为Map或其他扩展对象。二、几种方法探讨 1)scala自带的Json解析 scala 2.10(以上,其他版本不清楚)自带Json解析,scala.util.parsing.json.JSON 使用方法如下:val json = JSON.parseFull(st原创 2018-01-18 08:13:15 · 1366 阅读 · 0 评论 -
初试Scala解析XML
使用Scala解析XML,充分体现了函数式编程的特点,简洁和明了。用Java去解析不是不行,只不过代码不够清晰明了。首先先把XML文件读入到内存里:val someXml = XML.loadFile("file/FIXExample.xml")这样someXml是一个scala.xml.Elem对象。 Scala XML API提供了类似XPath的语法来解析XML。转载 2018-01-18 08:12:54 · 310 阅读 · 0 评论 -
Scala文件和正则表达式
摘要:在本篇中,你将学习如何执行常用的文件处理任务,比如从文件中读取所有行或单词,或者读取包含数字的文件等。本篇的要点包括:1. Source.fromFile(...).getLines.toArray输出文件的所有行2. Source.fromFile(...).mkString以字符串形式输出文件内容3. 将字符串转换为数字,可以用tolnt或toDouble方法4. 使转载 2018-01-18 08:12:30 · 379 阅读 · 0 评论 -
Scala class的构造方法与继承
有java背景的人,很清楚java是如何定义构造方法以及继承的。在scala里面,继承和java有些相似。但是构造方法的定义,就不大一样了,应该说是差别还是很大的。在java里面,定义构造方法,就是定义一个没有返回值类型的与类同名的方法。如下:package com.shihuc; 2 3 public class Person 4 { 5 private S转载 2018-01-18 08:12:13 · 866 阅读 · 0 评论 -
Scala之Methods
前面学习了Scala的Class,下面接着学习Method(方法)。二、Method Scala的方法与Java的方法类似,都是添加至类中的行为,但是在具体的实现细节上差异很大,下面展示一个参数为整形,返回值为String的方法定义 // javapublic String doSomething(int x) { // code here}// scala转载 2018-01-18 08:12:01 · 214 阅读 · 0 评论 -
闲谈Scala之Map和Tuple
Map构造Map不可变:val map = Map("sa" -> 1, "s" -> 2)map("sa") = 3 // errorval emptyMap = new scala.collection.immutable.HashMap[String, Int]可变:val map2 = scala.collection.mutable.Map("sa" -> 2原创 2018-01-18 08:11:51 · 750 阅读 · 0 评论 -
scala操作hbase案例
案例取自streaming-app项目package com.asiainfo.ocdc.streaming.toolsimport org.apache.hadoop.hbase.HBaseConfigurationimport org.apache.hadoop.conf.Configurationimport org.apache.hadoop.hbase.client.{Put翻译 2018-01-18 08:11:43 · 947 阅读 · 0 评论 -
scala实现spark-dataframe数据可视化初步
import org.apache.spark.sql.hive.HiveContextimport org.apache.spark.{Logging, SparkConf, SparkContext}import org.apache.spark.sql.{DataFrame, Row, SaveMode, _}import com.alibaba.fastjson.{JSON, JSO翻译 2018-01-18 08:11:28 · 1839 阅读 · 0 评论 -
Scala--映射和元组
一、构造映射 val scores = Map("Jim"->10, ("Tom",20), "Sam"->44) //key->value, (key,value)两种方式表示, 不可变映射, val s = scala.collection.mutable.Map("Jim"->10, ("Tom",20), "Sam"->44)//可变映射 val s1 = new sca转载 2018-01-16 10:18:26 · 206 阅读 · 0 评论 -
Scala之Numbers
Scala的Numbers。二、Numbers 在Scala中,所有的数字类型,如Byte,Char,Double,Float,Int,Long,Short都是对象,这七种数字类型继承AnyVal特质,这七种数字类型与其在Java中有相同的范围,而Unit和Boolean则被认为是非数字值类型,Boolean有false和true两个值,你可以获取到各个数字类型的最值。 复转载 2018-01-16 10:18:11 · 238 阅读 · 0 评论 -
Scala 脚本的 pound bang 魔术
在scala语言的创始者Martin Odersky等人所著的《Programing in Scala -- A comprehensive step-by-step guide》一书的附录A中,描述了在Unix和Windows执行Scala脚本的方法:Appendix AScala scripts on Unix and WindowsIf you’re on some fl转载 2018-01-16 10:18:01 · 609 阅读 · 0 评论 -
深入理解Scala的隐式转换系统
摘要:通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码。 使用方式:1.将方法或变量标记为implicit2.将方法的参数列表标记为implicit3.将类标记为implicit Scala支持两种形式的隐式转换:隐式值:用于给方法提供参数转载 2018-01-15 08:00:59 · 214 阅读 · 0 评论 -
Scala学习(一)
一、Scala论断Scala可以通过让你提升你设计和使用的接口的抽象级别来帮助你管理复杂性。例如,假设你有一个String变量name,你想弄清楚是否String包含一个大写字符。val nameHasUpperCase = name.exists(_.isUpperCase) Java代码把字串看作循环中逐字符步进的低层级实体。Scala代码把同样的字串当作能用论断:pred转载 2017-12-19 10:50:40 · 631 阅读 · 0 评论 -
Scala学习(十)--- 访问修饰符
scala的访问修饰符有如下几个特性:如果不指定访问修饰符,scala默认为public; 较之Java,scala对protected的定义更加严格; scala可以对可见性进行细粒度的控制。scala的默认访问修饰符如果没有修饰符,scala会默认把类、字段、方法的访问修饰符当做public。如果要将之调整为private或protected,只需在前面添加对应的修饰符原创 2017-12-19 11:02:55 · 172 阅读 · 0 评论 -
Scala基础(草记)
Scala编程思想www.scala-lang.org/download/---------------------------------------------------------------------scala-ide.org|-创建一个scala project|-创建一个包|-创建一个scala sheet|-测试--------------原创 2017-12-13 15:36:17 · 275 阅读 · 0 评论 -
Scala学习(七)---包和引入
摘要:在本篇中,你将会了解到Scala中的包和引入语句是如何工作的。相比Java不论是包还是引入都更加符合常规,也更灵活一些。本篇的要点包括:1. 包也可以像内部类那样嵌套2. 包路径不是绝对路径3. 包声明链x.y.z并不自动将中间包x和x.y变成可见4. 位于文件顶部不带花括号的包声明在整个文件范围内有效5. 包对象可以持有函数和变量6. 引入语句可以引入包转载 2017-12-19 10:56:41 · 415 阅读 · 0 评论 -
Scala学习(六)---Scala对象
摘要:在本篇中,你将会学到何时使用Scala的object语法结构。在你需要某个类的单个实例时,或者想为其他值或函数找一个可以挂靠的地方时,你就会用到它。本篇的要点包括:1. 用对象作为单例或存放工具方法2. 类可以拥有—个同名的伴生对象3. 对象可以扩展类或特质4. 对象的apply方法通常用来构造伴生类的新实例5. 如果不想显式定义main方法,可以用扩展App原创 2017-12-19 10:56:07 · 194 阅读 · 0 评论 -
Scala学习(四)---映射和元组
摘要:一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧"。哈希表或者更笼统地说映射,是最灵活多变的数据结构之一。映射是键/值对偶的集合。Scala有一个通用的叫法:元组,即n个对象的聚集,并不一定要相同类型的。对偶不过是一个 n=2的元组,元组对于那种需要将两个或更多值聚集在一起时特别有用。本篇的要点包括:01. Scala有十分易用的语法来创建、查询和遍历映射翻译 2017-12-19 10:55:28 · 178 阅读 · 0 评论 -
Scala学习(五)---Scala中的类
摘要:在本篇中,你将会学习如何用Scala实现类。如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利。本篇的要点包括:1. 类中的字段自动带有getter方法和setter方法2. 你可以用定制的getter/setter方法替换掉字段的定义,而不必修改使用类的客户端,这就是所谓的"统一访问原则"3. 用@BeanPro转载 2017-12-19 10:53:39 · 1515 阅读 · 0 评论 -
Scala学习(三)----数组相关操作
摘要:本篇主要学习如何在Scala中操作数组。Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素。在Scala中,我们的选择更多,不过现在我们先假定不关心其他选择,而只是想马上开始用数组。本篇的要点包括:1. 若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer2. 提供初始值时不要使用new3. 用()来访问元素4原创 2017-12-19 10:52:48 · 221 阅读 · 0 评论 -
Scala学习(二)--- 控制结构和函数
摘要:本篇主要学习在Scala中使用条件表达式、循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异。在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做两样不同的东西。表达式有值,而语句执行动作。在Scala中,几乎所有构造出来的语法结构都有值。这个特性使得程序更加精简,也更易读。本篇的要点包括:1. 表达式有值2. 块也有值,是它最后一个表翻译 2017-12-19 10:51:51 · 266 阅读 · 0 评论 -
Scala.Actor实践心得与设计思想
这段时间系统的学习了Scala,编程思想上可谓收获不少,想从里面挑些值得写的东西分享给大家,Scala的Actor可谓这门语言的一个亮点,函数式编程核心价值在于多核编程,所以就打算说说这个Actor,总结一下学习心得。先很俗套的简单谈谈概念,然后会拿四个例子做补充。主要内容包括基本原理,设计思想,单机环境并发测试。 Actor是一种基于事件的轻量级线程,在以前转载 2018-01-15 08:02:32 · 178 阅读 · 0 评论 -
Scala--样例类(case)详解
概述:case类在模式匹配和actor中经常使用到,当一个类被定义成为case类后,Scala会自动帮你创建一个伴生对象并帮你实现了一系列方法且带来了不少好处,如下:1.实现了apply方法,意味着你不需要使用new关键字就能创建该类对象12345scala> caseclass People(name:Str转载 2018-01-15 08:04:11 · 1710 阅读 · 1 评论 -
scala + intellij idea 环境搭建及编译、打包
大数据生态圈中风头正旺的Spark项目完全是采用Scala语言开发的,不懂Scala的话,基本上就没法玩下去了。Scala与Java编译后的class均可以运行于JVM之上,就好象.NET中F#与C#的关系。下面进入正题:1、下载scala sdkhttp://www.scala-lang.org/download/ 直接到这里下载sdk,目前最新的稳定版为2.11.7,下载后解压就行转载 2018-01-15 08:05:03 · 522 阅读 · 0 评论