首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Scala编译器发现了CanBuildFrom的哪个实例?

Scala编译器发现了CanBuildFrom的哪个实例?
EN

Stack Overflow用户
提问于 2011-11-28 08:27:39
回答 2查看 1K关注 0票数 7

所有人。请原谅我在Scala上问了一个愚蠢的问题。虽然我已经用Scala编程大约两年了,但我仍然发现很难理解implicit的用法。让我们举一个例子来讨论一下:

代码语言:javascript
运行
AI代码解释
复制
Array(1,2,3,4).map(x => x) 

如果你查找scaladoc,你不能在Array类上找到map方法。map可以应用于Array(1,2,3,4)的原因是在scala.Predef中定义了一个隐式函数implicit def intArrayOps (xs: Array[Int]): ArrayOps[Int]

但是,有两个参数列表,其中第二个参数列表写为implicit bf: CanBuildFrom[Array[T], B, That])。现在,我想知道当在Array(1,2,3,4)上应用map时,编译器在哪里为类型CanBuildFrom找到合适的参数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-28 09:45:03

隐式解决包括在伴生对象中搜索隐式参数的类型,以及在伴生对象中搜索隐式参数类型参数。在上面的示例中,map的签名如下所示

代码语言:javascript
运行
AI代码解释
复制
def map[B, That](f: (Int) => B)(implicit bf: CanBuildFrom[Array[Int], B, That]): That

因为我们对此没有类型要求,所以现在可以忽略它。在我们查看本地和容器作用域后,没有找到匹配的隐式,下一个要查找隐式的地方将是CanBuildFrom的伴生对象。但是,它没有伴生对象。所以我们继续在数组中寻找隐式的。我们找到了一个形式为

代码语言:javascript
运行
AI代码解释
复制
implicit def canBuildFrom[T](implicit m: ClassManifest[T]): CanBuildFrom[Array[_], T, Array[T]]

由于我们没有类型要求和隐式匹配,"That“被强制为ArrayInt类型,并完成了我们的类型。

票数 9
EN

Stack Overflow用户

发布于 2011-11-28 09:52:59

StackOverflow上的其他问题部分回答了这个问题。让我试着总结一下:

您需要知道的第一部分是Scala compiler looks for implicits在哪里。您可以找到有关CanBuildFrom here的更多详细信息。

如果您已经理解了答案中提到的关于隐式‣的内容,那么您应该看看Scala的构造。它们的继承层次结构在here和for List here中得到了解释。所有这些都是用Builders构建的。这在一个关于breakOut的问题中有详细的解释。

为了积累你的知识,你应该知道如何拉皮条。此外,在this question的StackOverflow上对此进行了解释。

请注意,Scala-Tag-Wiki中总结了有关StackOverflow的最佳答案。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8293173

复制
相关文章
Java与Scala如何编译Lambda表达式?
Lambda表达式在过去几年中风靡编程世界。大多数现代语言都将它们作为函数式编程的基础部分。基于JVM的语言(如Scala,Groovy和Clojure)已将它们集成为语言的关键部分,本文将会对比Java与Scala在编译Lambda表达式上存在的差异
疯狂软件李刚
2020/06/24
1.4K0
scala 集合详细
在scala 中元组可以容纳不同类型元素的类,元组是不可变的,用于函数返回多个值.
Tim在路上
2020/08/04
9160
GraphX具体功能的代码使用实例-Scala实现
GraphX 为整个图计算流程提供了强大的支持,先前已经有若干篇文章先后介绍了GraphX的强大功能,在GraphX官方编程指南中,提供了部分简单易懂的示例代码,其为GraphX的使用提供了一个初步的认识,作为需要用GraphX来编码实现需求的读者来说是十分宝贵的资源。
ZONGLYN
2019/08/08
2.1K0
SDP(3):ScalikeJDBC- JDBC-Engine:Fetching
  ScalikeJDBC在覆盖JDBC基本功能上是比较完整的,而且实现这些功能的方式比较简洁,运算效率方面自然会稍高一筹了。理论上用ScalikeJDBC作为一种JDBC-Engine还是比较理想的:让它处于各种JDBC工具库和数据库实例之间接收JDBC运算指令然后连接目标数据库进行相关运算后返回结果。一般来说,各种JDBC工具库如ORM,FRM软件通过各自的DSL在复杂的数据库表关系环境内进行数据管理编程,最终产生相关的SQL语句即(prepared)statement+parameters传递给指定类
用户1150956
2018/03/16
1.7K0
Scalaz(8)- typeclass:Monoid and Foldable
该文章介绍了如何使用Monoid类型进行并行计算和并行序列化。首先介绍了Monoid的概念,以及如何使用Scalaz库中的Monoid类型进行并行计算。然后介绍了如何使用Monoid类型进行并行序列化,并提供了几个例子。最后还介绍了如何使用Monoid类型进行并行处理,并提供了几个例子。
用户1150956
2018/01/05
1.1K0
SDP(5):ScalikeJDBC- JDBC-Engine:Streaming
  作为一种通用的数据库编程引擎,用Streaming来应对海量数据的处理是必备功能。同样,我们还是通过一种Context传递产生流的要求。因为StreamingContext比较简单,而且还涉及到数据抽取函数extractor的传递,所以我们分开来定义: case class JDBCQueryContext[M]( dbName: Symbol, statement: String,
用户1150956
2018/03/16
1K0
PICE(1):Programming In Clustered Environment - 集群环境内编程模式
首先声明:标题上的所谓编程模式是我个人考虑在集群环境下跨节点(jvm)的流程控制编程模式,纯粹按实际需要构想,没什么理论支持。在5月份的深圳scala meetup上我分享了有关集群环境下的编程模式思路。我提供了下面这个示意图:
用户1150956
2018/08/01
1.4K0
PICE(1):Programming In Clustered Environment - 集群环境内编程模式
C++、Python、Rust、Scala 构建编译器的差异性究竟有多大?
我在滑铁卢大学的最后一个学期选了CS444:编译原理这门课程,课程项目是编写一个编译器,将Java语言的子集编译成x86代码,三人结组,语言自由选择。
Python猫
2019/07/12
1.5K0
C++、Python、Rust、Scala 构建编译器的差异性究竟有多大?
SDP(7):Cassandra- Cassandra-Engine:Streaming
  akka在alpakka工具包里提供了对cassandra数据库的streaming功能。简单来讲就是用一个CQL-statement读取cassandra数据并产生akka-stream的Source。这是一个支持reactive-stream协议的流: object CassandraSource { /** * Scala API: creates a [[CassandraSourceStage]] from a given statement. */ def apply(
用户1150956
2018/03/16
3.4K0
SDP(12): MongoDB-Engine - Streaming
   在akka-alpakka工具包里也提供了对MongoDB的stream-connector,能针对MongoDB数据库进行streaming操作。这个MongoDB-connector里包含了MongoSource,MongoFlow,MongoSink。我们只使用MongoSource,其它两个我们直接用mapAsyc来创造。下面是MongoSource的定义: object MongoSource { def apply(query: Observable[Document]): Sour
用户1150956
2018/04/02
1.4K0
SDP(4):ScalikeJDBC- JDBC-Engine:Updating
    在上一篇博文里我们把JDBC-Engine的读取操作部分分离出来进行了讨论,在这篇准备把更新Update部分功能介绍一下。当然,JDBC-Engine的功能是基于ScalikeJDBC的,所有的操作和属性都包嵌在SQL这个类型中: /** * SQL abstraction. * * @param statement SQL template * @param rawParameters parameters * @param f extractor function * @tpara
用户1150956
2018/03/16
1.4K0
Scala教程之:scala的参数
在Scala中,可以给参数提供默认值,这样在调用的时候可以忽略这些具有默认值的参数。
程序那些事
2020/07/07
6200
【Scala篇】--Scala中的函数
Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明。
LhWorld哥陪你聊算法
2018/09/13
1.5K0
【Scala篇】--Scala中的函数
Scala教程之:面向对象的scala
我们知道Scala是一种JVM语言,可以合java无缝衔接,这也就大大的扩展了scala的应用范围,大数据里面有名的spark就是使用scala编写的,那么scala到底有什么奥秘和特性呢?我们一一来揭秘。
程序那些事
2020/07/07
5720
Scala中的语言特性是如何实现的?
image.png #思特沃克好声音# (图片:网络) 我们学东西不止要知其然,还要知其所以然。成都办公室的崔鹏飞在学Scala的时候,不止学习如何使用Scala,也研究了Scala中的语言特性是如何实现的。 Scala中的语言特性是如何实现的(1) Scala可以编译为Java bytecode和CIL,从而在JVM和CLI之上运行。Scala有很多在Java和C#的世界中显得陌生的语言特性,本文将分析这些语言特性是如何实现的。 object Scala中可以像这样创建object: image.png
ThoughtWorks
2018/04/16
1K0
Scala中的语言特性是如何实现的?
Scala教程之:可扩展的scala
隐式类是在scala 2.10中引入的,隐式类指的是用implicit关键字修饰的类。在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换。
程序那些事
2020/07/07
1.3K0
PICE(2):JDBCStreaming - gRPC-JDBC Service
   在一个akka-cluster环境里,从数据调用的角度上,JDBC数据库与集群中其它节点是脱离的。这是因为JDBC数据库不是分布式的,不具备节点位置透明化特性。所以,JDBC数据库服务器必须通过服务方式来向外提供数据操。在这种场景里服务端是JDBC服务,其它节点,包括其它的JDBC数据库节点都是这个JDBC服务的调用客户端。因为我们已经明确选择了在akka-cluster集群环境里实施gRPC服务模式,通过akka-stream的流控制方式实现数据库操作的程序控制,所以在本次讨论里我们将示范说明gRPC-JDBC-Streaming的具体实现和使用方式。
用户1150956
2018/07/31
1.5K0
SDP(6):分布式数据库运算环境- Cassandra-Engine
    现代信息系统应该是避不开大数据处理的。作为一个通用的系统集成工具也必须具备大数据存储和读取能力。cassandra是一种分布式的数据库,具备了分布式数据库高可用性(high-availability)特性,对于一个实时大型分布式集成系统来说是核心支柱。与传统的关系数据库对比,cassandra从数据存储结构、读取方式等可以说是皆然不同的。如:cassandra库表设计是反范式的(denormalized)、表结构设计是反过来根据query要求设计的,等等。幸运的是自版本3.0后cassandra提供
用户1150956
2018/03/16
1.7K0
点击加载更多

相似问题

Scala集合CanBuildFrom

23

Scala2.8 CanBuildFrom

23

Scala:如何找出哪个CanBuildFrom实现用于StringOps.map

12

使用scala集合- CanBuildFrom问题

37

在Scala中创建CanBuildFrom

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文