Scala 中的广义结构类型一致性

2023-12-02

我对使特定类型符合更通用的结构类型的问题感兴趣。考虑以下示例:

trait Sup

trait Sub extends Sup

type General = {
   def contra(o: Sub): Unit
   def co(): Sup
   def defaults(age: Int): Unit
   def defaults2(age: Int): Unit
   def defaults3(first: String): Unit
} 

trait Specific {
   def contra(o: Sup): Unit // doesn't conform
   def co(): Sub // conforms
   def defaults(age: Int, name: String = ""): Unit // doesn't conform
   def defaults2(name: String = "", age: Int = 0): Unit // doesn't conform
   def defaults3(first: String = "", last: String = ""): Unit // doesn't conform
}

在每种不符合要求的情况下,都会调用以下方法General可以安全地解析为相应的方法Specific。一个更有趣的实际例子可以在这个问题:

trait Versionable[T] {
   self: { def copy(version: Int): T } =>
   val version = 0
   def incrementVersion = copy(version = version + 1)
}

case class Customer(name: String, override val version: Int) 
      extends Versionable[Customer] {
   def changeName(newName: String) = copy(name = newName)
}

在这里,客户的copy方法不符合 Versionable 的自类型注释中的签名。但请注意,如果编译器允许,copy可以像在中那样调用Versionable.incrementVersion。显然,客户的实际签名copy方法对于在版本化中使用来说过于具体,因为它携带了不相关的知识,人们可以选择提供一个name范围。

有办法解决这些限制吗?是否有理由认为这种普遍的一致性是一个坏主意?


一个问题是,当您阅读这段代码时:

self: { def copy(version: Int): T }

您不希望参数的名称很重要,因为在本例中它必须如此:

case class Robot(number: Int, override val version: Int)
  extends Versionable[Robot]

EDIT:另一方面,关于方法缺乏参数逆变,您可以这样做:

type General = { val contra: (Sub => Unit) }
class B { val contra = ((o:Sup) => println(o)) }
var b:General = new B
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 中的广义结构类型一致性 的相关文章

  • 使用无形类型不等式时如何自定义 Scala 模糊隐式错误

    def typeSafeSum T lt Nat W lt Nat R lt Nat x T y W implicit sum Sum Aux T W R error R 7 x typeSafeSum 3 4 compilation er
  • Spark Streaming 中是否需要检查点

    我注意到 Spark 流示例也有检查点代码 我的问题是检查点有多重要 如果是为了容错 那么在此类流应用程序中发生故障的频率是多少 这一切都取决于您的用例 假设您正在运行一个流作业 它仅从 Kafka 读取数据并计算记录数 如果您的应用程序在
  • 尝试创建 jar 时出现 UNRESOLVED DEPENDENCIES 错误

    我正在尝试构建一个 Scala jar 文件以在 Spark 中运行它 我正在关注这个tutorial http spark apache org docs latest quick start html 当尝试使用 sbt 作为构建 ja
  • Scala 中缺少多重集吗?

    我正在尝试 Scala 中的 Facebook Hacker Cup 2013 资格赛问题 对于第三个问题 我觉得需要一个有序的 Multiset 但在 scala 的 2 10 集合中找不到一个 scala 的集合中是否缺少此数据结构 会
  • Scala 中的行聚合

    我正在寻找一种方法在 Scala 的数据框中获取一个新列来计算min max中的值col1 col2 col10对于每一行 我知道我可以使用 UDF 来做到这一点 但也许有一种更简单的方法 Thanks Porting 这个Python答案
  • Scalaz 拆箱标记类型不会自动拆箱

    Reading http eed3si9n com learning scalaz Tagged type html http eed3si9n com learning scalaz Tagged type html并尝试示例代码 imp
  • 将当前类作为 scala 中的参数传递

    如何传递当前类作为参数 在java中我们这样做 mymethod this class or mymethod MyClass class 如何将 scala 当前类传递给此方法 this getClass or classOf MyCla
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • 如何在 Spark 数据帧 groupBy 中执行 count(*)

    我的目的是做相当于基本sql的事情 select shipgrp shipstatus count cnt from shipstatus group by shipgrp shipstatus 我见过的 Spark 数据帧的示例包括其他列
  • Scala:“递归值...需要类型”,但我只使用 Java 类型

    object Rec extends App val outStream new java io ByteArrayOutputStream val out new java io PrintStream new java io Buffe
  • xsbt 插件 1.0.0-M7 和 scalatra

    我尝试在我的 scalatra 项目中将 xsbt 插件升级到 1 0 0 M7 但 scalatra 似乎与此版本不兼容 当我尝试重新加载项目时 出现以下错误 我尝试过 scalatra 2 3 0 版本 问候 德斯 java lang
  • 如何使用精炼库定义 A 和 B 取决于彼此的类型类?

    Problem 我有一个案例类 Passenger 从 A 点出发 前往 B 点 有效乘客意味着A点不等于B点 Passenger a Int b Int 问题 我如何使用设计乘客舱refind https index scala lang
  • SBT插件——编译前执行自定义任务

    我刚刚编写了我的第一个 SBT 自动插件 它有一个生成设置文件的自定义任务 如果该文件尚不存在 当显式调用任务时 一切都会按预期工作 但我希望在使用插件编译项目之前自动调用它 无需项目修改其 build sbt 文件 有没有办法实现这一点
  • Map 和 Set 的实际类(不是抽象类,也不是特征类)是什么?

    在 Scala 中 映射和集合文字可以通过以下方式创建 val m Map 1 gt a 以及引用的类型m字面意思都是Map Int String 然而 scala文档表明Map实际上是一个特征 具有需要实现才能实例化的抽象成员 scala
  • 如何在每行中添加行号?

    假设这些是我的数据 Maps and Reduces are two phases of solving a query in HDFS Map is responsible to read data from input location
  • 如果需要,Akka actor 可以从邮箱中删除消息吗?

    例如 如果我想从队列中删除冗余消息 这样当演员收到Connect消息 它应该检查它的邮箱并删除其他Connect消息 以便只进行一个连接而不是多个连接 这样的事情可能吗 是的 您可以将参与者调度程序配置为具有您选择的任何邮箱 因此如果您实现
  • 将 Scala AST 转换为源代码

    给定一个 Scala AST 有没有办法生成 Scala 源代码 我正在研究通过解析 分析其他 Scala 源代码来自动生成 Scala 源代码的方法 任何提示将不胜感激 我已经成功使用Scala 重构 http scala refacto
  • 为 Apache Spark 示例运行 Cypher (CAPS)

    我知道这是一个广泛的问题 但这会对neo4j不属于某个领域的用户scala编程 我需要使用Apache Spark 项目的 Cypher https github com opencypher cypher for apache spark
  • Spark DataFrame 不尊重架构并将所有内容视为字符串

    我面临着一个多年来一直无法克服的问题 我使用的是 Spark 1 4 和 Scala 2 10 我现在无法升级 大型分布式基础设施 我有一个包含几百列的文件 其中只有 2 列是字符串 其余都是长列 我想将此数据转换为标签 特征数据框 我已经
  • 如何处理 Spark 数据框中外连接的数据倾斜

    我有两个数据框 正在对 5 列执行外连接 下面是我的数据集的示例 uniqueFundamentalSet PeriodId SourceId StatementTypeCode StatementCurrencyId FinancialS

随机推荐

  • Python virtualenv 问题

    我在 Windows XP 上使用 VirtualEnv 我想知道我的大脑是否正确地围绕它 I ran virtualenv ENV它创造了C WINDOWS system32 ENV 然后我改变了我的PATH要包含的变量C WINDOWS
  • 矩阵的块对角绑定

    R 是否具有将矩阵绑定为块对角形状的基函数 以下可以完成这项工作 但我想知道是否有标准方法 a lt matrix 1 6 2 3 b lt matrix 7 10 2 2 rbind cbind a matrix 0 nrow nrow
  • 复制包含索引的表

    有没有办法在 SQL Server 中复制表 不仅仅是像这样的数据SELECT INTO还可以索引 也许还有键 如果我走脚本表为 gt 创建到它遗漏了我的索引 如果此功能不可用 为什么不呢 我确信这个问题肯定被问了 1000 次 但我找不到
  • 关于C中的qsort(),** buf和buf[][]的区别

    当我在 Mac 上的 C 语言中使用 qsort 时 这些代码运行良好 它可以很好地对一个文件中的每一行进行排序 int compare const void p const void q return strcmp p q void fu
  • 如何在jtree中仅列出非隐藏和非系统文件

    File f new File C File fList f listFiles 当我使用它时 它会列出所有系统文件以及隐藏文件 而这个原因空指针异常当我用它在 jTree 中显示时 如下所示 public void getList Def
  • 从所有浏览器注销用户

    我在用着表单验证mechanizm 和 auth 用户通过 FormsAuthentication SetAuthCookie Can I logout当前用户来自所有浏览器不知何故 在认证参数中添加一个guid参数 还将 guid 保存到
  • 动态CRM插件下载Word文档

    我创建了 CRM 插件 在创建案例时需要将文档下载到客户端 当我创建案例时 插件正在工作 但它不下载文档 在控制台中我可以看到通过 POST 请求返回文档内容 AppWebServices InlineEditWebService asmx
  • 如何将从 sha1 字节数组生成的字符串返回到该字节数组?

    首先很抱歉英语不好 好吧 我想从 torrent 文件中读取片段哈希信息 目前 我正在使用https github com hyPiRion java bencode这个 Bencode 库来解码信息 但我的问题是当我想将片段字符串转换为字
  • 自定义MKOverlayRenderer drawMapRect函数不绘制多边形

    我构建了一个自定义 MKOverlayRenderer 来构建多边形 应用混合模式 然后将它们添加到地图视图中 在我的drawMapRect函数中 我使用CGPoints数组来构建多边形 并创建一条路径 但是 在运行时 我的地图视图上没有显
  • JavaScript:一个变量可以有多个值吗?

    除了 jQuery 之外 我对 JavaScript 还很陌生 我正在阅读 JavaScript 数组中的随机化以及使用带有随机数的 Array sort 方法的缺点 我看到建议是使用 Fisher Yates 洗牌 查看此方法的 Java
  • 导入错误:没有名为 base 的模块

    我正在尝试为我的第一次登录测试实现 PageObject 模式 运行时我收到以下错误 gt gt py test v test login py test session starts platform linux2 Python 2 7
  • Django OneToOne 反向关系当空时DoesNotExists

    我正在使用 Django 1 8 3 以及 Rest Framework 和 json api https github com django json api django rest framework json api 我有这种一对一的
  • Java 中的斐波那契数列耗时太长?

    我试图在 Java 中找到斐波那契数列的总和 但运行时间太长 或者是应该的 每当我使用超过 40 的整数时 速度都会变慢 注意 在 50 时 返回负值 这让我很困惑 有什么建议吗 public static void main String
  • JAAS认证新手;使用 URL 栏中的令牌登录 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一个有趣的项目要求 我们必须接受令牌作为 GET 参数 以对进入应用程序的用户进行身份验证 这是为了允许受信任的第三方将用户无缝地发送到我们的网站 而无需让他们再次登录 一个
  • IE 中的 org.openqa.selenium.NoSuchElementException 错误,但相同的代码在 Chrome 和 Firefox 中工作正常

    我编写了一个登录脚本 当我使用 ChromeDirver 和 FFDriver 执行它时 它工作正常 但是当我使用 IE 驱动程序运行相同的命令时 它失败并给出以下错误 Exception in thread main org openqa
  • SVG 在 Firefox 中仅部分显示

    我目前正在使用 SVG 格式的瑞士地图 这
  • 在ADT中使用Drawerlayout时,选项列表中没有显示layout_width属性

    我是 Android 新手 我研究了 Google 的导航抽屉示例http developer android com training implementing navigation nav drawer html 我在 eclipse
  • 带有母版页/模板的 React Router V4 路由器

    我对反应和尝试创建一个具有两种设计的应用程序相对较新 一种是具有公共页眉和页脚的公共网站 以及具有管理页眉和侧栏的内部应用程序 我创建了一个路由器和 2 个主路由 和 app 然后我添加了子路由 希望如果父路由器匹配 它将显示父组件并将子路
  • 从列表中删除字典

    如果我有一个字典列表 请说 id 1 name paul id 2 name john 我想删除字典id共 2 个 或姓名 john 以编程方式处理此问题的最有效方法是什么 也就是说 我不知道列表中条目的索引 因此不能简单地弹出它 thel
  • Scala 中的广义结构类型一致性

    我对使特定类型符合更通用的结构类型的问题感兴趣 考虑以下示例 trait Sup trait Sub extends Sup type General def contra o Sub Unit def co Sup def default