scala
文章平均质量分 51
苏门学士
这个作者很懒,什么都没留下…
展开
-
unapplyDemo
class ApplyDemo { def apply() = "apply in class" def test { println("test") }}/** * 伴生对象,相当于类的静态方法 */object ApplyDemo { def stat { println("static method") } def apply()转载 2017-09-29 11:49:11 · 150 阅读 · 0 评论 -
偏函数Demo
//偏函数//被包在花括号内没有match的一组case语句是一个偏函数,它是PartialFunction[A, B]的一个实例,A代表参数类型,B代表返回类型,常用作输入模式匹配package cn.itcast.casesobject PartialFuncDemo { def func1: PartialFunction[String, Int] = { case原创 2017-09-26 19:40:37 · 167 阅读 · 0 评论 -
OptionDemo
//Option类型//在Scala中Option类型样例类用来表示可能存在或也可能不存在的值(Option的子类有Some和None)。//Some包装了某个值,None表示没有值object OptionDemo { def main(args: Array[String]) { val map = Map("a" -> 1, "b" -> 2) val v =原创 2017-09-26 19:38:34 · 172 阅读 · 0 评论 -
样例类Demo
//在Scala中样例类是一中特殊的类,可用于模式匹配。case class是多例的,后面要跟构造参数,case object是单例的import scala.util.Randomcase class SubmitTask(id: String, name: String)case class HeartBeat(time: Long)case object CheckTimeO原创 2017-09-26 19:36:29 · 300 阅读 · 0 评论 -
匹配数组、元组
package cn.itcast.cases object CaseDemo extends App{ val arr = Array(1, 3, 5) arr match { case Array(1, x, y) => println(x + " " + y) case Array(0) => println("only 0") case Ar原创 2017-09-26 19:30:39 · 182 阅读 · 0 评论 -
类型检查和转换
ScalaJavaobj.isInstanceOf[C]obj instanceof Cobj.asInstanceOf[C](C)objclassOf[C]C.class原创 2017-09-26 19:23:41 · 279 阅读 · 0 评论 -
apply方法
1.1.1. apply方法通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1,...参数n)时apply方法会被调用 object ApplyDemo { def main(args: Array[String]) { //调用了Array伴生对象的apply方法 //def apply(x: Int, xs: Int*):原创 2017-09-26 19:22:19 · 423 阅读 · 0 评论 -
构造器注意点
注意:主构造器会执行类定义中的所有语句/** *每个类都有主构造器,主构造器的参数直接放置类名后面,与类交织在一起 */ class Student(val name: String, val age: Int){ //主构造器会执行类定义中的所有语句 println("执行主构造器") try { println("读取文件")原创 2017-09-26 19:16:59 · 208 阅读 · 0 评论 -
计算工时小程序
每次月末看到到家都在计算工时够不够,好辛苦,还容易出错,于是就写了个小程序给大家用大大的彩蛋:https://mp.csdn.net/postedit/82686446package utilimport scala.collection.mutable.ArrayBufferimport scala.io.Sourceobject WorkTimeHelper extends...原创 2017-09-26 18:54:25 · 2691 阅读 · 0 评论 -
trait 实例
//Implement a class IterableInputStream that extends java.io.InputStream with the trait Iterable[Byte] .class IterableInputStram(is: InputStream) extends InputStream with Iterable[Byte] { overri原创 2017-09-23 19:00:23 · 214 阅读 · 0 评论 -
深入理解Scala的隐式转换系统
摘要:通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码。 使用方式:1.将方法或变量标记为implicit2.将方法的参数列表标记为implicit3.将类标记为implicit Scala支持两种形式的隐式转换:转载 2017-09-27 11:06:17 · 171 阅读 · 0 评论 -
一个矩阵的简单运算工具类
object MatrixTool extends App { class Matrix(val m: Array[Array[Double]]) { val rows = m.length val cols = m(0).length def apply(r: Int, c: Int) = m(r)(c) def update(r: Int, c: In原创 2017-09-28 18:08:25 · 271 阅读 · 0 评论 -
XMLhandleTest
import scala.collection.mutable.ArrayBufferimport scala.xml._import scala.xml.parsing.XhtmlParserimport scala.io.Sourceimport scala.xml.transform.{RewriteRule, RuleTransformer}object XMLhandleTe原创 2017-10-12 18:09:49 · 384 阅读 · 0 评论 -
Compare performance for immutable var / mutable val
/** * Compare performance for immutable var / mutable val * varImmutable: 1641ms * valMutable: 110ms * valArrayFixedLength: 93ms */object PerformmancetTest extends App { val count =原创 2017-10-12 17:56:58 · 179 阅读 · 0 评论 -
Idea hot key
一.找文件找代码找引用相关1.双击shift 在项目的所有目录查找,就是你想看到你不想看到的和你没想过你能看到的都给你找出来2.ctrl+f 当前文件查找特定内容3.ctrl+shift+f当前项目查找包含特定内容的文件4.ctrl+n 查找类5.ctrl+shift+n查找文件6.ctrl+e 最近原创 2017-10-12 11:33:08 · 274 阅读 · 0 评论 -
利用模式匹配和递归计算list
val l = List(List(9,8),8,List(12)) def leafSum(l: List[Any]): Int = l.map(_ match { case l: List[Any] => leafSum(l) case x: Int => x case _ => 0 }).sum println(leafSum(l))原创 2017-10-10 10:46:30 · 252 阅读 · 0 评论 -
scala继承例子1
import scala.collection.mutable.ArrayBufferobject Demo3 extends App { abstract class Item { def price: Double def description: String } class SimpleItem(val price: Double, val descr原创 2017-09-22 16:43:44 · 168 阅读 · 0 评论 -
scala 继承父类
class Point(val x: Double, val y: Double)class LabeledPoint(val label: String,val x: Double, y: Double) extends Point(x, y)val p = new LabeledPoint("label", 12.32, 56.3)println(p.label)printl...原创 2017-09-22 16:38:20 · 694 阅读 · 1 评论 -
交换一个数组前两个元素位置(@的用法)
def swap2(a: Array[Int]) = a match { case Array(a, b, end@_*) => Array(b, a) ++ end}assert(swap2(Array(1, 2, 3, 4)).deep == Array(2, 1, 3, 4).deep)一个大大的彩蛋:https://mp.csdn.net/postedit/82686...原创 2017-10-09 17:20:13 · 2323 阅读 · 0 评论 -
实现一个adjustToPair(_ * _)(6,7) = 42 的方法
object Demo6 extends App { def adjustToPair(f: (Int, Int) => Int) = (t: (Int, Int)) => f(t._1, t._2) val pairs = (1 to 10) zip (11 to 20)// pairs.foreach(println) println(pairs.map(adjustToP原创 2017-09-30 17:11:30 · 168 阅读 · 0 评论 -
list的:+ 和 :+操作区别
val lst = List(1, 2, 3, 4, 5, 6, 7, 8, 9)val a = (List[Int]() /: lst) ((i, l) => l +: i)val b = lst.foldLeft(List[Int]())((i, l) => l +: i)val c = lst.foldLeft(List[Int]())((i, l) => i :+ l)pri原创 2017-10-09 14:51:16 · 241 阅读 · 0 评论 -
特质->self type:this
trait Buffering { this: FileInputStream => val b = new BufferedInputStream(this) override def read(ab: Array[Byte]): Int = { b.read(ab) } } val b = new FileInputStream("c:/ObjectT原创 2017-09-23 18:34:25 · 164 阅读 · 0 评论 -
特质的继承层级
//Make your own silly trait hierarchy example that demonstrates layered traits,//concrete and abstract methods, and concrete and abstract fields.trait Woody { val wood: String def play:原创 2017-09-23 18:14:51 · 196 阅读 · 0 评论 -
十,显示转换和隐式转换
显式类型转换 正如之前所述的,scala中类型转换使用方法实现,以下是显式类型测试和显式类型转换的示例:a.isInstanceOf[String] // 显式类型测试a.asInstanceOf[String] // 显式类型转换 隐式转换、隐式参数 隐式转换: 隐式转换只是普通的方法,唯一特殊的地方是它以修饰符implic原创 2017-09-13 11:45:15 · 301 阅读 · 0 评论 -
九,特质
特质相当于接口,不能被实例化。特质定义使用trait关键字,与类相似,你同样可以在其中定义而不仅是声明字段和方法等。你可以使用extends或with将多个特质“混入”类中。注意当在定义特质时,使用extends指定了特质的超类,那么该特质就只能混入扩展了指定的超类的类中。 特质与类的区别在于:①特质不能带有“类参数”,也即传递给主构造器的参数;②不论在类的哪个地方,super原创 2017-09-13 11:44:00 · 202 阅读 · 0 评论 -
八,抽象类和成员类
与java相似,scala中abstract声明的类是抽象类,抽象类不可以被实例化。 在scala中,抽象类和特质中的方法、字段和类型都可以是抽象的。示例如下: trait MyAbstract { type T原创 2017-09-13 11:43:06 · 289 阅读 · 0 评论 -
七,类和对象
类(class)和构造器: 类的定义形式如下:class MyClass(a: Int, b: Int) { println(a.toString)}在scala中,类也可以带有类参数,类参数可以直接在类的主体中使用,没必要定义字段然后把构造器的参数赋值到字段里,但需要注意的是:类参数仅仅是个参数而已,不是字段,如果你需要在别的地方使用,就必须定原创 2017-09-13 11:42:09 · 177 阅读 · 0 评论 -
六,闭包,尾递归,高阶函数,偏函数等
闭包:闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。比如说,在函数字面量中使用定义在其外的局部变量,这就形成了一个闭包。如下代码foreach中就创建了一个闭包:var sum = 0 List(1,2,3,4,5).foreach(x=> sum += x)原创 2017-09-13 11:40:28 · 207 阅读 · 0 评论 -
五,函数
函数定义: 定义函数时,除了递归函数之外,你可以省略返回值类型声明,scala会根据=号后边的表达式的类型推断返回值类型,同时=号后边表达式的值就是函数的返回值,你无需使用return语句(scala推荐你使用表达式值代替return返回值,当然根据你的需要,也可以显式使用return返回值)。示例如下: def abs(x: Doubl原创 2017-09-13 11:39:07 · 217 阅读 · 0 评论 -
四,控制结构
scala和其他编程语言有一个根本性差异:在scala中,几乎所有构造出来的语法结构都有值。这个特性使得程序结构更加精简。scala内建的控制结构很少,仅有if、while、for、try、match和函数调用等而已。如此之少的理由是,scala从语法层面上支持函数字面量。 if表达式:scala的if/else语法结构与java等一样,但是在scala中if/else表达式有值,这个原创 2017-09-13 11:38:08 · 254 阅读 · 0 评论 -
三,操作符,表达式与赋值
scala的操作符和你在java和C++中的预期效果是一样的,但注意scala并不提供++、--操作符。不过,scala中的操作符实际上都是方法,任何方法都可以当作操作符使用,如 a + b 相当于 a.+(b)。 需要注意的是:对于不可变对象(注:对象的不可变并不是说它的引用变量是val的),并不真正支持类似于“+=”这样以“=”结尾的操作符(即方法),不过scala还是提供原创 2017-09-13 11:36:06 · 165 阅读 · 0 评论 -
二,变量,标识符
变量scala有两种变量:val和var。val如同java中的final变量,var如同java中的非final变量。由于scala是完全面向对象的,因此val和var只是声明了对象的引用是不可变的还是可变的,并不能说明引用指向的对象的可变性。声明变量的同时需要初始化之,否则该变量就是抽象的。如果不指定变量的类型,编译器会从初始化它的表达式中推断出其类型。当然你也可以在必要的时候指定其类型,原创 2017-09-13 11:34:00 · 263 阅读 · 0 评论 -
十一,类型参数化
类型参数化 在scala中,类型参数化(类似于泛型)使用方括号实现,如:Foo[A],同时,我们称Foo为高阶类型。如果一个高阶类型有2个类型参数,则在声明变量类型时可以使用中缀形式来表达,此时也称该高阶类型为中缀类型,示例如下: class Foo[A,B] val x:Int Foo String = null // Int FooStr原创 2017-09-14 14:09:27 · 566 阅读 · 0 评论 -
十二,集合
scala的集合(collection)库分为可变(mutable)类型与不可变(immutable)类型。以Set为例,特质scala.collection.immutable.Set和scala.collection.mutable.Set都扩展自scala.collection.Set。 scala集合的顶层抽象类和特质: scala.collection.immutab原创 2017-09-14 14:10:28 · 165 阅读 · 0 评论 -
trait 继承的Demo
trait Logger { def log(msg: String) {}}trait PrinterLogger extends Logger { val v = 24 override def log(msg: String): Unit = { println(msg) }}trait CryptoLogger extends Logger { v原创 2017-09-23 17:31:06 · 140 阅读 · 0 评论 -
scala-io-读写对象
@SerialVersionUID(42L)class Person(val name: String) extends Serializable { private val Friends = new ArrayBuffer[Person]() def addFriend(p: Person) { Friends += p } def isFriend(p: Per原创 2017-09-23 16:05:04 · 224 阅读 · 0 评论 -
scala File -demo1
def countClass(dir: File): Int = { val dirList = dir.listFiles dirList.filter(_.toString.endsWith(".class")).length + dirList.filter(_.isDirectory).map(countClass(_)).sum}val dir = "E:\\woskspa原创 2017-09-23 13:31:10 · 112 阅读 · 0 评论 -
scala-io-demo1
val in = Source.fromFile("c:/test.txt") //for (m <- """\d{2,}""".r.findAllIn(in.toArray)) println(m) //"""\d{2,}""".r.findAllIn(in.toArray).foreach(println)///notice:in just only be used on原创 2017-09-23 12:00:43 · 126 阅读 · 0 评论 -
scala 继承2
class Creature { def range: Int = 110 val env: Array[Int] = new Array[Int](range)}class AntA extends Creature { override def range = 20}class AntB extends Creature { override val range原创 2017-09-23 10:20:50 · 124 阅读 · 0 评论 -
十六,与java交互
结合scala和java scala和java高度兼容,因此可以进行互操作,大多数情况下结合这两种语言时并不需要太多顾虑,尽管如此,有时你还是会遇到一些结合java和scala的问题。基本上,scala使用java代码相对于java使用scala代码更容易一些。 scala代码如何被翻译: scala的实现方式是将代码翻译为标准的java字节码原创 2017-09-14 14:49:14 · 115 阅读 · 0 评论