Scala学习笔记
文章平均质量分 54
杨过悔
这个作者很懒,什么都没留下…
展开
-
scala安装
scala-2.10.4.zip可以从官网下载,安装以默认的方式安装即可,安装后在安装的目录的bin下打开scala.bat原创 2015-03-26 22:54:07 · 327 阅读 · 0 评论 -
用hash操作符来引用一个抽象类型的变量:
用hash操作符来引用一个抽象类型的变量:scala> trait Foo[M[_]] { type t[A] = M[A] }defined trait Fooscala> val x: Foo[List]#t[Int] = List(1)x: List[Int] = List(1)转载 2015-05-14 17:30:43 · 476 阅读 · 0 评论 -
参数化类型的多态
如果我们结合隐式转换implicits使用容器,我们会得到“特设的”多态性:即对容器写泛型函数的能力。scala> trait Container[M[_]] { def put[A](x: A): M[A]; def get[A](m: M[A]): A }scala> implicit val listContainer = new Container[List] {转载 2015-06-17 13:31:33 · 1455 阅读 · 0 评论 -
scala调用java api
1.看一个socket实例,直接调用java api即可Executors.newFixedThreadPool(poolSize) * Creates a thread pool that reuses a fixed number of threads * operating off a shared unbounded queue. At any point,原创 2015-06-18 12:37:28 · 1842 阅读 · 0 评论 -
The Path is Relative
From above code val in = new inner.InInner, we've already known, the path of a package can be relative. This can save us some keystrokes, since we don't have to put the whole path outer.inner.转载 2015-06-19 21:54:34 · 558 阅读 · 0 评论 -
Access Modifier
[Scala Level: A1]Basically, access modifier in Scala is like other languages we are familiar with. They all use 'private', 'protected' and 'public' to identify differnct level of accessibili转载 2015-06-19 22:02:47 · 658 阅读 · 0 评论 -
在eclipse配置scala项目
Eclipse的功能固然比不上IDEA。当觉得一个程序员在编写代码时,不要太依赖平台!最新的scala定制版ECLIPSE的稳定新已经比以前改善好多了sbteclipse Plugin for sbt to create Eclipse project definitions. Please see the Documentation for information a转载 2015-06-20 21:04:41 · 1808 阅读 · 0 评论 -
JVM 并发性: Scala 中的异步事件处理
原文在任何并发性应用程序中,异步事件处理都至关重要。无论事件的来源是什么(不同的计算任务、I/O 操作或与外部系统的交互),您的代码都必须跟踪事件,协调为响应它们而执行的操作。应用程序可以采用两种基本方法之一来实现异步事件处理:阻塞 :一个等待事件的协调线程。非阻塞 :事件向应用程序生成某种形式的通知,而没有线程显式等待它。在 “ JVM 并发性 :阻塞还是非阻塞? ” 中转载 2015-06-09 17:45:32 · 590 阅读 · 1 评论 -
量化
有时候,你并不关心是否能够命名一个类型变量,例如:scala> def count[A](l: List[A]) = l.sizecount: [A](List[A])Int这时你可以使用“通配符”取而代之:scala> def count(l: List[_]) = l.sizecount: (List[_])Int这相当于是下面代码的简写:s转载 2015-05-14 13:16:41 · 523 阅读 · 0 评论 -
隐藏信息
1.通过私有构造器及工厂方法class A private { private val leading:List[Int], ...}...然后在伴生对象里调用该类,或者添加辅助构造器def this() = this(Nil,Nil)2.通过私有类trait Queue[+T] { def head:T def tail:Q原创 2015-07-27 11:15:59 · 486 阅读 · 0 评论 -
Comparing Scala JSON Libraries
http://engineering.ooyala.com/blog/comparing-scala-json-libraries Evan ChanSoftware DevelopmentWe were working on a Spark job to read JSON files out of HDFS, and it seemed转载 2015-09-08 22:05:00 · 618 阅读 · 0 评论 -
scala的宏定义
其实宏的使用并不难,api已经帮我们做好了一切,我们只要关注如何使用获取宏参数和宏的返回值一个例子:import scala.reflect.macros.Contextimport scala.collection.mutable.{ListBuffer, Stack}object QStringImpl { def Qmap(p: Char => Int,elem:原创 2015-10-07 22:28:30 · 3866 阅读 · 0 评论 -
scala反射
1.其实scala的非FP部分,看官方DOC是一个非常好的一个选择,FP部分推荐还是看HASHELL,毕竟我看过的书籍中,FP部分基本是HASHELL的"翻译",HASHELL是个非常好的语言,甚至其作者是推荐作为大学的课本,你不必会用HASHELL编写程序,这个是很少见的,但是要有HASHELL语言的思考逻辑去学习一门FP语言,记得我接触HASHELL是大二的时候了,它对我的影响却是很大.原创 2015-11-02 11:45:39 · 4524 阅读 · 0 评论 -
更高级多态性类型 和 特设多态性
Scala可以对“更高阶”的类型进行抽象。例如,假设您需要用几种类型的容器处理几种类型的数据。你可能定义了一个Container的接口,它可以被实现为几种类型的容器:Option、List等。你要定义可以使用这些容器里的值的接口,但不想确定值的类型。这类似与函数柯里化。例如,尽管“一元类型”有类似List[A]的构造函数,这意味着我们必须满足一个“级别”的类型变量来产生一个具体的类型(就像转载 2015-05-14 17:10:42 · 483 阅读 · 0 评论 -
结构类型
Scala 支持 结构类型 structural types — 类型需求由接口 构造 表示,而不是由具体的类型表示。scala> def foo(x: { def get: Int }) = 123 + x.getfoo: (x: AnyRef{def get: Int})Intscala> foo(new { def get = 10 }) re转载 2015-05-14 17:19:59 · 323 阅读 · 0 评论 -
Monad
Todd.log - a place to keep my thoughts on programming冒号老师谈Monad那天就Monad的问题向冒号老师请教,下面是他的答复,与大家共享:关于monad实现I/O的问题,Haskell有专门的I/O库,包括readFile,writeFile,getChar,putChar等函数,具体由编译器执行。在C#或F#中转载 2015-05-14 07:50:50 · 506 阅读 · 0 评论 -
Scala使用IDE
1.下载eclipse的scala插件2.http://scala-ide.org/download/sdk.html其次要注意该IDE是支持JDK6和IDE7的,之前自己的JDK是8版本的,结果在命令行编译scala工程时各种问题,所以务必不要JDK8去运行scala,如果你用jdk8运行不会出现问题就略过3.hello world(假设你已经安装了scala的sdk)原创 2015-03-27 23:37:27 · 1204 阅读 · 0 评论 -
Scala中隐式转换(implicit conversion)的优先顺序
在学习Scala的时候,隐式转换(implicit conversion)这个特性让我实在是闹不住啊。于是乎一边试用一边感慨:真的是太强大,太方便了。不过,越是强大且方便的东西,越容易用出毛病来。在我不求甚解的情况下,毛病就来了,我把它称为隐式转换优先顺序问题:假设我们有一个表示文本的行数的类LineNumber:class LineNumber (转载 2015-03-31 22:01:21 · 604 阅读 · 0 评论 -
异步处理请求
package controllersimport play.api._import play.api.mvc._import concurrent.{ExecutionContext, Future}object Application extends Controller { def index = Action { Ok(views.html.index("Yo原创 2015-04-18 10:54:52 · 727 阅读 · 0 评论 -
Scala的foldLeft和foldRight
Scala的foldLeft和foldRightFoldLeft定义如下: override /*TraversableLike*/ def foldLeft[B](z: B)(f: (B, A) => B): B = { var acc = z var these = this while (!these.isEmpty) { acc转载 2015-04-11 10:16:19 · 483 阅读 · 0 评论 -
ubuntu安裝 install sbt
wget http://apt.typesafe.com/repo-deb-build-0002.debsudo dpkg -i repo-deb-build-0002.debsudo apt-get updatesudo apt-get install sbt原创 2015-04-30 19:42:09 · 577 阅读 · 0 评论 -
Array的分元操作
一个简单的例子def max(values: Int*) = values.foldLeft(values(0)) { Math.max }参数是多个Int类型参数列,它可以操作println(max(2, 5, 3, 7, 1, 6))如果是这样val numbers = Array(2, 5, 3, 7, 1, 6)就会出错现在我们会用到一个知识点就是数组的分元操作原创 2015-05-12 07:53:21 · 330 阅读 · 0 评论 -
scala api之Await
Await is what is used to ensure proper handling of blocking for Awaitable instances.While occasionally useful, e.g. for testing, it is recommended that you avoid Await when possible in favor of ca原创 2015-05-05 22:46:38 · 3535 阅读 · 0 评论 -
Scala case语句与偏函数
Scala通过case语句提供了形式简单、功能强大的模式匹配功能。但是也许你不知道,Scala还具有一个与case语句相关的语言特性,那就是:在Scala中,被“{}”包含的一系列case语句可以被看成是一个函数字面量,它可以被用在任何普通的函数字面量适用的地方,例如被当做参数传递。 Scala代码 scala> val defaultValue:Option转载 2015-05-06 11:15:32 · 4145 阅读 · 0 评论 -
函数组合
函数组合让我们创建两个函数:scala> def f(s: String) = "f(" + s + ")"f: (String)java.lang.Stringscala> def g(s: String) = "g(" + s + ")"g: (String)java.lang.Stringcomposecompose 组合其他函数形成一个新的函数 f(g(x))转载 2015-05-14 09:49:34 · 413 阅读 · 0 评论 -
偏函数
理解PartialFunction(偏函数)对给定的输入参数类型,函数可接受该类型的任何值。换句话说,一个(Int) => String 的函数可以接收任意Int值,并返回一个字符串。对给定的输入参数类型,偏函数只能接受该类型的某些特定的值。一个定义为(Int) => String 的偏函数可能不能接受所有Int值为输入。isDefinedAt 是PartialFunc转载 2015-05-14 09:58:23 · 775 阅读 · 0 评论 -
变性 Variance
Scala的类型系统必须同时解释类层次和多态性。类层次结构可以表达子类关系。在混合OO和多态性时,一个核心问题是:如果T’是T一个子类,Container[T’]应该被看做是Container[T]的子类吗?变性(Variance)注解允许你表达类层次结构和多态类型之间的关系:含义 Scala 标记协变covariant C[T’]是 C[T] 的子类[+T]逆变contr转载 2015-05-14 13:08:53 · 426 阅读 · 0 评论 -
case 之谜
case 之谜上周我们看到一些新奇的东西。我们在通常应该使用函数的地方看到了一个case语句。scala> case class PhoneExt(name: String, ext: Int)defined class PhoneExtscala> val extensions = List(PhoneExt("steve", 100), PhoneExt("robey"转载 2015-05-14 09:59:00 · 354 阅读 · 0 评论 -
使用动态类型Dynamic Type
scala作为一个严格的静态类型,它是支持动态类型的,当前他是属于实验性的,这里在实际的生产环境中是否是个good idea我也不晓得类似宏我们得在编译器中开启这个功能importscala.language.dynamics使用也是比较简单的,我们可以用idea直接查看Dynamic的源码,而且里面也包含了四个方法的使用,我们只要实现对应的方法就可以达到动态语言的原创 2017-03-03 10:49:45 · 1756 阅读 · 0 评论