因为在Play中对于基本类型T(例如 String, Int, ...)以及Seq[T]已经提供了默认的隐式转换, 可以自动将其转换成对应的JSON类型,例如: //基本类型值 Json.obj("name...我们可以把隐式 Format 对象定义在伴生对象中,这样的话就可以在任意位置执行转换而无需导入隐式对象: import play.api.libs.json.Json case class Address...我们也可以在包对象(package object)中创建隐式的 Format 对象,假设 Address 和 Person 都定义在 models 包下,则我们可以为 models 包创建一个包对象,并在其中创建隐式的...,所以定义在包对象中的隐式 Format 对象会被自动加载,而无需显示导入。...更多的隐式转换来源请参考官方的总结的隐式转换规则。
概览 在本文中将介绍 Scala 的 Play Web 开发框架。...命令行工具 Play 框架官方文档提到 sbt 是一个强大的控制台和构建工具,我们可以从使用 sbt 工具生成一个空白的 Play 框架的项目开始。...controllers 目录用来保存 Scala 代码 views 目录用来保存 HTML 模板 conf 保存着路由配置既请求的 URL 地址和类以及函数的映射关系 public 目录保存着 Play...我们想在 HomeController 控制器中定义一个新的 Action 以及路由,这个 Action 将会从 URL 地址中接收到两个参数并且打印出这两个数的和。...简单来说我们将从 URL 中读取两个数并且在页面中展示这两个数的和 为了实现这个功能,我们需要在 HomeController.scala 控制器中添加新的方法,这个方法接收两个参数,计算它们的和并传递到视图模板中渲染
它是一个现代化的全栈Web框架,基于Java和Scala开发,特别适合构建高性能、可扩展的Web应用和REST API。...Play Framework 的设计理念是快速开发和响应式编程,非常适合现代应用的需求。 安装和配置非常简单。...如果你是Scala用户,可以选择: 1 sbt new playframework/play-scala-seed.g8 这会创建一个带有基本结构的项目,包括控制器、路由和视图。...控制器(Controller)负责处理HTTP请求。在Java中,一个简单的控制器可能看起来像这样: 12345678910 package controllers;import play.mvc....经过一些简单的尝试,发现Play Framework 非常适合那些需要快速开发、响应式和高并发的应用场景。尤其是如果你喜欢Java或Scala,Play 的简洁语法和强大功能绝对会让你惊喜。
Spark框架本身即用Scala编写,这使得在Scala中编写Spark应用时能够获得最佳的API体验和性能。Scala的高效率、并发处理能力以及对集合操作的优化,特别适合大规模数据处理和分析任务。...Scala的集合框架 Scala的集合框架是其另一个亮点,提供了丰富的数据结构和高度抽象的操作方法,如映射(map)、过滤(filter)、折叠(fold)等,这些方法都是函数式编程的典型特征。...Implicits(隐式) 隐式机制是Scala中一个强大的特性,它允许编译器自动插入某些类型转换或参数,使得代码更加简洁和灵活。...隐式转换可以自动将一种类型的值转换为另一种类型,而隐式参数则允许方法调用时自动提供某些参数。...RichInt后调用times方法 在这个例子中,我们定义了一个RichInt类,它扩展了Int的功能,并通过隐式转换使得任何Int类型值都能自动转换为RichInt,进而调用times方法。
Spark框架本身即用Scala编写,这使得在Scala中编写Spark应用时能够获得最佳的API体验和性能。Scala的高效率、并发处理能力以及对集合操作的优化,特别适合大规模数据处理和分析任务。...Scala的集合框架Scala的集合框架是其另一个亮点,提供了丰富的数据结构和高度抽象的操作方法,如映射(map)、过滤(filter)、折叠(fold)等,这些方法都是函数式编程的典型特征。...Implicits(隐式)隐式机制是Scala中一个强大的特性,它允许编译器自动插入某些类型转换或参数,使得代码更加简洁和灵活。...隐式转换可以自动将一种类型的值转换为另一种类型,而隐式参数则允许方法调用时自动提供某些参数。...RichInt后调用times方法在这个例子中,我们定义了一个RichInt类,它扩展了Int的功能,并通过隐式转换使得任何Int类型值都能自动转换为RichInt,进而调用times方法。
目前有如下三个基于 Scala 开发的 MongoDB 驱动可供选择: Mongo Scala Driver ReactiveMongo Play Mongo Mongo Scala...另外 Mongo Scala Driver 的数据库操作默认返回 Observable 类型,如果你忘记了调用 toFuture 方法,或是没有消费返回数据,则数据库操作实际上并不会被执行,在开发中很容易引入一些...关于模型层的设计,我们可以选择贫血模型、充血模型以及应对复杂业务的领域模型。关于模型层的设计,我们将会在“第四部分 Play 框架开发实战”中继续讨论。...我们仍然需要定义全局共享的隐式 Format 对象: import play.api.libs.json.Format package object models { implicit val personFormat...} 由于这些隐式的 Format 对象是在模型层的包对象(package object)中创建的,所以使用时无需显式导入,编译器会自动加载。
在Scala中,函数和类,对象等一样,都是一等公民。Scala中的函数可以独立存在,不需要依赖于任何类与对象。 1.3:Scala的函数式编程,就是Scala面向过程的最好的佐证。...最核心的就是定义隐式转换函数,即implicit conversion function。定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用。...也就是说,可以为,某个类定义一个加强版的类,并定义互相之间的隐式转换,从而让源类在使用加强版的方法时,由Scala自动进行隐式转换为加强肋,然后再调用该方法。...6.5:隐式参数: 所谓的隐式参数,指的是在函数或者方法中,定义一个用implicit修饰的参数,此时Scala会尝试找到一个指定类型的,用implicit修饰的对象,即隐式值,并注入参数。...之Actor(多线程编程,注意,Spark中使用的分布式多线程框架,是Akka): Scala的Actor类似于Java中的多线程编程。
其动态特性使得对于企业级服务器端核心业务逻辑开发并不是一个好的选择。 3)Scala是一个OO/函数式语言,采用类C语法。深入研究之后,你会发现其函数特性更为明显。...其静态类型系统采用的方式很简单。泛型仅仅在列表(List)、映射(Map)和函数(Function)中得到支持,开发者不能自己添加。在开发者需要添加的时候,Fantom会自己自动进行类型转换。...使用隐式类,Scala甚至允许你对现有类型类进行操作,无论他们来自Scala或java! 函数式编程(Functional) Scala也是骨子里透着函数式编程范式的语言。...流行的Scala框架,包括Akka, Finagle, and the Play web framework include dual APIs for Java and Scala....maven-scala-plugin是編譯期依賴,scala代碼需要scala的compiler,所以在maven構建過程中,使用一個編譯scala代碼的maven插件.這是typesafe(scala
说到网络框架,Ruby的Ruby on Rail和Python的Django都相当轻巧好用,但Java下的框架,则要沉重很多。有人因此质疑Java语言本身是否符合网络时代的需求。...想要轻巧好用的框架?写一个给你就是了。Java程序员Guillaume Bort在JVM上创造了一个全新的框架Play framework。...我一般是在/home/vamei/Util/下创建一个bin文件夹,并在该文件夹中创建play的软链接。...routes记录了url请求和控制器的对应关系。当有http请求进入时,Play将根据该文件的设置,调用特定的控制器行动。 现在,切换到/home/vamei/test,并运行项目。...一个action会经过一系列的运算,产生一个响应。而控制器controller只是一个action的集合。在Java编程中,action是controller类的一个方法。
其实,传统方式可以看做是一种隐式路由,而我们需要写的这种是一种显式的路由。Laravel 也是支持隐式路由的,只是它并不推荐这么做。那么,显式路由有什么好处呢?...Route::put('/put/request', function(){ return 'put'; }); 如果你在 POST 的路由上,使用 GET 的方式来进行访问的话,就会触发异常信息...如果是传统框架没有加任何判断的情况下,也是可以直接请求到控制器的,只是说我们从 _POST 中无法获取数据而已。...传统框架中的控制器就是路由,如果想要动态地改变这个路由链接,那么要么改控制器的名字,要么去 nginx 上配置转发重写,都远不如框架中自带路由来得方便快捷。...Illuminate/Routing/RouteCollection.php 文件中的这个 RouteCollection 类,其实也就是调用的这个类的 match() 方法。
,表达方式,上界为例 <% 1)可以接收以下类型 (1)上界和下界的类型 (2)允许通过隐式转换过去的类型(定义一个隐式转换函数)...,也可以是能够转换成String的其他类 调用:报错,没有找到隐式转换规则吧int转换成String类型 scala> def addTwoString...,Int类型,接收的是String类型 (2)在当前的会话中查找有没有一个隐式转换函数,满足Int可以转换成String类型 (3)如果找到了... (*)隐式参数 核心:隐式转换 参考ImplicitParam代码 (*)隐式类 在类前面加个implicit关键字...,变成了隐式转换类 参考ImplicitClassDemo代码 (*)使用柯里化实现隐式转换 (actor编程,两年前已经被废弃)
而Scala程序员,却早就在享受lambda、高阶函数、trait、隐式转换等带来的福利了。 Java像是一头史前巨兽,它在OO的方向上几乎走到了极致,硬将它拉入FP阵营,确乎有些强人所难了。...JS的控制器负责控制客户端的界面逻辑,服务端的控制器则负责处理业务逻辑,于是传统的MVC就变化为VC+R+C模式。...若硬要使用专有的Web框架,在Scala技术栈下,最为流行的就是Play Framework,这是一个标准的MVC框架。另外一个相对小众的Web框架是Lift。...它与大多数Web框架如RoR、Struts、Django以及Spring MVC、Play不同,采用的并非MVC模式,而是使用了所谓的View First。...在内存中它的运行速度是Hadoop MapReduce的100倍,在磁盘中是10倍。
在开始阅读本文之前,请确保你熟悉Play-Json的相关开发,或是已经阅读过Play Scala 2.5.x - Play JSON开发指南。 1 为什么要Play with MongoDB?...Reactive-Mongo是一个基于Scala编写的异步非阻塞MongoDB驱动,该项目同时提供了Play框架的集成插件Play-ReactiveMongo。...下面代码定义了一个Person类,以及用于完成Person和JsObject之间相互转换的隐式OFormat[Person]对象personFormat。...._ import reactivemongo.play.json.collection._ //导入隐式的format对象,用于JsObject Person之间相互转换 import models.JsonFormats...Play框架的热加载功能。
Manager的实现和在使用中遇到的几种坑; Kafka Manager实现 实现语言: Scala 用到的框架和第三方库: Play framework: Kafka-Mananger本质上是个Web...应用, 因此使用play framework的MVC架构实现; AKKA: 用于构建高并发、分布式和容错的应用....实现: 其实kafka manager的代码还是很清晰易阅读的, 如果熟悉scala和play的话应该没有难度. 不同本人也是现学现用, 好惭愧~~~....zk上读取, /consumers 上面的这些实现都在 KafkaStateActor.scala 这个文件里....前面我们讲过使用kafka sdk不断地消费"__consumer_offsets", 看看这段代码(在KafkaStateActor.scala中): props.put("group.id"
起初,我以为在 Scala 中也是这样使用的,但是直到今天我才恍然大悟,在 Scala 中扩展方法其实不是那么简单,此处说的不简单主要说的是实现的意义不简单,而不是实现方法。本文对此进行简单介绍。...一、 实现方法 首先,来说明实现方法,正如上文所说,在 Scala 中其实实现起来也很容易。...首先我们有一个要扩展的类型假定为 C,定义如下: trait A { def play = println("play") } 就是这么简单的一个类,包含一个 play 方法,当然可以有各种各样的子类继承于他...第四步,实现一个隐式类型,将 A 对象隐式转换为 C: implicit class D(val self: A) extends C 最终,我们可以直接对 A 对象的实例调用扩展方法: new A {...然而,今天我突然意识到一个问题,在我使用的一个类库中,很多自己定义的类型也采用此种方式定义了大量的扩展方法,那我就纳闷了,为什么不直接写到类型的定义中呢?
SparkSQL支持查询原生的RDD。 RDD是Spark平台的核心概念,是Spark能够高效的处理大数据的各种场景的基础。 能够在Scala中写SQL语句。...支持简单的SQL语法检查,能够在Scala中写Hive语句访问Hive数据,并将结果取回作为RDD使用。 ...2.子类中实现了serializable接口,父类中没有实现,父类中的变量不能被序列化,序列化后父类中的变量会得到null。 ...java代码: /** * 注意: * 1.自定义类必须是可序列化的 * 2.自定义类访问级别必须是Public * 3.RDD转成DataFrame会把自定义类中字段的名称按assci码排序 */ SparkConf.../sparksql/person.txt") /** * 将RDD隐式转换成DataFrame */ import sqlContext.implicits._ val personRDD = lineRDD.map
类型参数 Scala 的类型参数其实意思与 Java 的泛型是一样的,也是定义一种类型参数,比如在集合,在类,在函数中,定义类型参数,然后就可以保证使用到该类型参数的地方,就肯定,也只能是这种类型。...使用泛型类,通常是需要对类中的某些成员,比如某些 field 和 method 中的参数或变量,进行统一的类型限制,这样可以保证程序更好的健壮性和稳定性。 ...Scala的上下边界特性允许泛型类型必须是某个类的子类,或者必须是某个类的父类。...然而,View Bounds 作为一种上下边界 Bounds 的加强版,支持可以对类型进行隐式转换,将指定的类型进行隐式转换后,再判断是否在边界指定的类型范围内。...,它会根据泛型类型的声明,比如“T: 类型”要求必须存在一个类型为“类型[T]”的隐式值。
对于大数据稍有了解的人应该知道,大数据主要的编程语言,是使用Java来完成的,而Java之外,掌握一定的Scala,在大数据开发学习当中,能够更好地掌握相关技术框架。...1.jpg Scala作为一门面向对象的函数式编程语言,把面向对象编程与函数式编程结合起来,使得代码更简洁高效易于理解。这就是Scala得到青睐的初衷。...在Spark框架当中,通过Scala完成的源码,整体简洁度是备受称赞的。 大部分从事大数据开发的工程师是先了解Spark进而再去选择学习Scala的。...5、scala trait,掌握特质的基本特性和示例。 6、集合操作,掌握常用集合和集合函数。 7、读取数据源,scala如何通过Source类读取数据源。...8、隐式转换、隐式参数,掌握Java和scala之间的类型转换。 9、正则匹配,掌握如何写正则相关的代码。 10、基本数值类型转换,掌握Scala与Java基本数值类型转换。
Scala:高阶函数、隐式转换 课程目标 理解高阶函数的概念(作为值的函数、匿名函数、闭包、柯里化) 掌握隐式转换和隐式参数 掌握Akka并发编程框架 1....隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能。我们可以很方便地利用隐式转换来丰富现有类的功能。...功能——实现将文本中的内容以字符串形式读取出来 步骤 创建RichFile类,提供一个read方法,用于将文件内容读取为字符串 定义一个隐式转换方法,将File隐式转换为RichFile对象 创建一个File...()) } 2.2 隐式转换的时机 当对象调用类中不存在的方法或者成员时,编译器会自动将对象进行隐式转换 当方法中的参数的类型与目标类型不一致时 2.3 自动导入隐式转换方法 前面,我们手动使用了import...在scala中,如果在当前作用域中有隐式转换方法,会自动导入隐式转换。
领取专属 10元无门槛券
手把手带您无忧上云