首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为Play初学者准备的Scala基础知识

() { value += 1} //方法默认public def current() = value } Scala的源文件中可以定义多个类,并且默认都是public,所以外界都可以看见。...中,类、函数、方法和object可以像变量一样在任何地方定义。...这两个方法各自接受一个一元函数(即只有一个参数的函数,类型为:(A) => B),利用这个一元函数,你可以对数据流中的每一个元素进行一些操作或转换,最终得到一个全新的数据流。...flatMap方法接受的一元函数类型为:(A) => List[B],我们发现该一元函数返回的类型也是一个List,flatMap方法会自动将由每个元素A转换成的小List[B]展平成一个大的List[...List上演示了map和flatMap的基本用法,Scala中所有的容器类型(例如Option, Either, Future, Set, ...)都内置了这两个方法。

1.8K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编程修炼 | Scala亮瞎Java的眼(二)

    例如,在Java中,当我们需要定义一个能够接收lambda表达式的方法时,还需要声明形参为接口类型,Scala则省去了这个步骤: def find(predicate: Person => Boolean...表达式add(2) _返回的事实上是需要接受一个参数的函数,因此addFor变量的类型为函数。...此时result的结果为7。 当然,从底层实现来看,Scala中的所有函数其实仍然是接口类型,可以说这种高阶函数仍然是语法糖。...我们还可以利用for表达式组合多个future,AKKA中的ask模式也经常采用这种方式: object Cloud { def runAlgorithm(times: Int): Future...Scala提供了非常丰富的并行集合,它的核心抽象是splitter与combiner,前者负责分解,后者就像builder那样将拆分的集合再进行合并。在Scala中,几乎每个集合都对应定义了并行集合。

    1.4K50

    restapi(0)- 平台数据维护,写在前面

    我在上一个系列有关CQRS的博客中按照实际应用的要求对akka的一些开发技术进行了介绍。CQRS模式着重操作流程控制,主要涉及交易数据的管理。...所以平台基础数据维护系统是一套前后台结合的系统。对于一个开放的平台系统来说,应该能够适应各式各样的前端系统。一般来讲,平台通过定义一套api与前端系统集成是通用的方法。...在这些要求背景下,相对gRPC, GraphQL来说,REST风格的http集成模式能得到更多开发人员的接受。...在restapi这个系列里我想系统化的用akka-http构建一套完整的,REST风格数据维护和数据交换api,除CRUD之外还包括网络安全,文件交换等功能。...) => Some(user.userInfo) case _ => None } case _ => None } } 好了,服务端示范代码中可以直接构建或者调用这些标准的类型了

    71320

    Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、

    如这里没有写name的String类型。      ...Scala自动为case class定义了伴生对象,也就是Obeject,并且定义了apply()方法,该方法接受主构造函数中相同的参数,并且返回case class对象。...Scala会根据隐式转换函数的签名,在程序中使用隐式转换函数接受的参数类型定义的对象时,会自动将其传入隐式转换函数,转换为另外一种类型的对象并且返回。...b、使用某个类型的对象,调用某个方法,而这个方法并不存在与该类型中。 c、使用某个类型的对象,调用某个方法,虽然该类型有这个方法,但是给方法传入的参数类型,与方法定义的接受参数的类型不匹配。...6.5:隐式参数: 所谓的隐式参数,指的是在函数或者方法中,定义一个用implicit修饰的参数,此时Scala会尝试找到一个指定类型的,用implicit修饰的对象,即隐式值,并注入参数。

    2.9K50

    使用Akka HTTP构建微服务:CDC方法

    同时考虑到所有HTTP元素必须匹配(方法,url,标题,正文和查询) 用于验证消费者契约的实际测试的定义: 此代码将针对以前的方案运行,虚拟服务器将响应 交互部分中定义的唯一HTTP请求(如果响应为deined...我们也可以尝试执行Pact test(MyLibraryClientPactSpec),但它会失败,因为它应该执行一个真正的HTTP调用,scala-pact框架将启动一个真实的HTTP服务器,接受和响应协议中描述的请求...另外,我总是建议采用增量方法(即使是小型项目),所以在这种情况下,我们可以构建一个服务器来公开一个API并返回两个类别的静态列表(如Pact文件中定义的),然后添加配置支持,数据库支持,迁移支持等。...最后一条指令是定义TableQuery对象,该对象对于该表执行任何类型的查询都是必需的。...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO的示例和信息。

    7.5K50

    并发编程时代,我们应何去何从?

    要实现一个能够正常运行的并发程序,比实现一个顺序程序要困难得多。顺序程序设计中的所有难点都会在并发程序设计中出现,但不止如此,并发程序设计中还有另一些挑战。...Scala 尽管Scala 仍旧处于发展之中,还没有成为广泛流行的编程语言(如Java),但它为并发程序设计提供了丰富的支持并具有强大的功能。...Scala 生态体系中存在几乎支持所有并发编程模式的并发框架,而且这些框架正在积极发展。在其全部发展过程中,Scala 为并发程序设计提供了现代化的高级编程接口,从而扩展了并发编程技术的应用领域。...许多现代并发框架的固有句法灵活性能够与Scala 相合 这归功于第一类函数、叫名参数、类型推断和模式匹配等功能,通过这些功能可以将API 定义得像该语言的固有功能一样。...除此之外,JVM 拥有定义明确的线程和内存模型,这可以确保在不同的计算机上Scala 程序都能够以相同的方式运行。对于顺序程序的语义一致性来说,可移植性非常重要,而在并发程序中可移植性就更为重要。

    48630

    浅谈Slick(2)- Slick101:第一个动手尝试的项目

    看完Slick官方网站上关于Slick3.1.1技术文档后决定开始动手建一个项目来尝试一下Slick功能的具体使用方法。我把这个过程中的一些了解和想法记录下来和大家一起分享。...除h2之外其它都没进行测试验证,具体配置参数和方法要参考数据库开发商提供的技术文档。我在这个示范里选用了h2配置:它会在我的用户根目录下创建一个slickdemo.h2.db数据库文件。...基本流程是这样的:首先在数据库里创建表,跟着写入一些数据,然后再读出显示。整个过程会涉及:表结构schema定义,数据插写Insert,数据读取Query及简单的Query运算方法和数据显示方法。...我们是用Future类型的andThen组件来显示运算结果的: table ALBUMS created....{Await, Future} 5 import scala.util.

    1.6K90

    影响Scala语言设计的因素列表

    除语法之外,Scala还采用了Java的其他元素,诸如它的基本类型,类库和它的执行模式。 Scala也欠了其他语言的很多情。它的统一对象模型是由Smalltalk发起的,之后又被Ruby发扬光大。...他的通用嵌套的思想(几乎所有的Scala里的构造都能被嵌套进其他构造)也出现在Algol,Simula,和最近的Beta与gbeta中。它的方法调用和字段选择的统一访问原则来自于Eiffel。...还有一些接受了对象系统的以函数式为主的语言;OCaml,F#和PLT-Scheme是其中的例子。 Scala同样也对编程语言领域贡献了一些革新。...举例来说,它的抽象类型提供了对泛型类型来说更面向对象的替代,它的特质允许灵活的控件组合,还有他的拆分器提供了独立于表达的方式去做模式匹配。这些革新已在近年编程语言会议中阐述在论文里了。...【相关阅读】 喜欢Scala编程的四个理由 Scala融合面向对象和函数概念的方法 [Scala的语言特性——可伸展的语言 ](http://developer.51cto.com/art/200907

    1.2K70

    Play For Scala 开发指南 - 第3章 常用类介绍

    提供的List基本可以实现SQL查询的所有功能,这也是Spark为什么基于Scala开发的原因。...在Scala中默认的集合类例如List,Set,Map,Tuple等都是不可变的,所以调用其修改方法会返回一个新的实例。...处于完成状态的Future可能包含两种情况的信息,一种是异步任务执行成功了,Future中包含异步任务执行成功的返回结果;另一种是异步任务执行失败了,Future中包含了相应的Exception信息。...Failure(t) => println("failed: " + t.getMessage) } } //等待任务结束 Await.ready(f, 10 seconds) onComplete方法接受一个一元函数...第1行import语句导入了一个隐式的ExecutionContext,你可以把它理解成是一个线程池,Future类在需要时会自动使用其上的线程。在Scala中你不需要直接和线程打交道。

    84650

    alpakka-kafka(1)-producer

    如:有两个业务模块:收货管理和库存管理,一方面收货管理向kafka写入收货记录。另一头库存管理从kafka中读取收货记录并更新相关库存数量记录。注意,这两项业务是分别操作的。...在alpakka中,实际的业务操作基本就是在akka-streams里的数据处理(transform),其实是典型的CQRS模式:读写两方互不关联,写时不管受众是谁,如何使用、读者不关心谁是写方。...这里的写和读两方分别代表kafka里的producer和consumer。 本篇我们先介绍alpakka-kafka的producer功能及其使用方法。...[K, V] ): Flow[Envelope[K, V, PassThrough], Results[K, V, PassThrough], NotUsed] = { ... } Results类型定义如下...还有一类如commitableSink还包括了把消息读取位置offset写入commit的功能。

    97820

    Scala专题系列(九) : Scala函数式编程

    : 修改了变量值 直接修改了数据结构 创建了一个对象的成员 抛出了一个异常或者通过错误停止 读取或写入一个文件 修改除本身外的其他变量 那么一个纯函数含义是如何来定义的呢?...对于一个输入类型A和输出类型B的函数f(scala里面写为:A=>B 读作 A 到 B) 它是一种将所有A类型的值a关联到某个确切的B类型的值b的运算过程,即b完全由a来决定,任何内部或者外部过程的状态改变都不会影响到...比如: def sum(x : Int,y : Int) : Int = { x + y } 上述例子中,sum函数,接受两个Int类型的参数,最后将两个参数值相加,那么sum函数就是一个纯函数...map的时候 multipliter的参数就是i,而i就是filter之后的值之后reduce 将值进行累乘 即使 factor 处于某个局部作用域(如某个方法)中,而我们将 multiplier 传递给其他作用域...(如另一个方法)中时,这一机制仍然有效。

    39510

    Scala Actors迁移指南

    (msg: Any): Future[Any] 被?替换。这条规则会改变一个返回类型到scala.concurrent.Future这可能导致类型不匹配。...由于scala.concurrent.Future比过去的返回值具有更广泛的功能,这种类型的错误可以很容易地固定在与本地修改: !!...替换都将显式的阻塞在future对象 这里没有提到的公共方法是为了actors DSL被申明为公共的。他们只能在定义actor时使用,所以他们的这一步迁移是不相关的。...因为ActWithStash中的receive 方法不能在act中像原来那样使用。要使代码通过编译,需要在所有的 receive 调用中加上类型参数。...在Scala中,控制器的行为主要是在act方法的中定义。逻辑上来说,控制器是一个并发执行act方法的过程,执行完成后过程终止。在Akka中,控制器用一个全局消息处理器来依次处理它的的消息队列中的消息。

    1K20

    Play For Scala 开发指南 - 第10章 MongoDB 开发

    另外 Mongo Scala Driver 的数据库操作默认返回 Observable 类型,如果你忘记了调用 toFuture 方法,或是没有消费返回数据,则数据库操作实际上并不会被执行,在开发中很容易引入一些...() = {     Mongo.setModelsPackage("models")   } } Mongo.setModelsPackage方法将会查找指定包路径下的所有Case Class,自动生成驱动所需的编解码器...} 由于这些隐式的 Format 对象是在模型层的包对象(package object)中创建的,所以使用时无需显式导入,编译器会自动加载。..., find 方法上的参数类型 User 仅仅用于指定返回的结果类型, 我们可以通过更改该参数类型设置不同的返回结果类型, mongo.collection("common-user").find[JsObject...除此之外,MongoDB不仅方便开发,而且容易维护,普通的开发人员利用自带的mongodump和mongorestore命令便可进行备份、恢复操作。

    1.5K10

    Scala网络爬虫实战:抓取QQ音乐的音频资源

    在本文中,我们将结合网络爬虫技术和Scala编程,以爬取QQ音乐的音频资源为例,深入探讨网络爬虫的原理和Scala在实践中的应用。...Scala编程简介 Scala是一种功能强大的多范式编程语言,结合了面向对象和函数式编程的特性。它具有优雅的语法、强大的类型系统和丰富的库支持,适用于各种应用场景,包括网络爬虫开发。...Scala的主要特点包括: 面向对象和函数式编程:Scala既支持面向对象编程的特性,如类和对象,又支持函数式编程的特性,如高阶函数和不可变性。...强大的类型系统:Scala的类型系统非常严格,可以帮助开发者在编译时捕获许多常见的错误,提高代码的稳定性和可靠性。...我们定义了一个QQMusicCrawler对象,其中包含了以下几个关键功能: fetchHtml方法:发送HTTP请求,获取QQ音乐网站的HTML页面内容。

    9410

    Scala | 教程 | 学习手册 --- 字面量值变量和类型

    类型type:所有数据都对应一个特定的类型。所有scala类型都定义为包含方法的类,这些方法用来处理数据。...不过,如果定义类型double的var,再赋值Int值是可以的。因为Int数可以转为Double数。 命名 所有字符(不包括点号和[])和数字。...scala合法标识符的规则: 一个字母后跟有0个或多个字母和数字,可结合下划线_ 一个或多个操作符字符 一个或多个除反引号外的任意字符 在命名上,类型和类一般大写字母开头,值和变量小写字母开头,其余单词首字母大写...类似java中的void关注简直,定义一个函数不返回数据。...在scala中作为不返回任何结果的函数或表达式的返回类型。

    67210
    领券