scala:重写构造函数的隐式参数

2024-01-27

我有一个类,它采用隐式参数,该参数由类内部方法调用的函数使用。我希望能够覆盖该隐式参数,或者从其源复制隐式参数。举个例子:

def someMethod()(implicit p: List[Int]) {
  // uses p
}

class A()(implicit x: List[Int]) {

  implicit val other = List(3) // doesn't compile

  def go() { // don't want to put implicit inside here since subclasses that override go() have to duplicate that
    someMethod()
  }
}

我想要的行为是 someMethod() 获取一个隐式参数,该参数是 x 的某些更改版本,这是该类的隐式参数。我希望能够在不更改 x 的情况下将其传递给 A 的构造函数,或者将其重写为我选择的新值。这两种方法似乎都不起作用。也就是说,在前一种情况下它不会复制列表,并且编译器会为后一种情况找到一个不明确的隐式值。有没有办法做到这一点?

我意识到我可以重新定义 go() 中的隐式值,但在我的情况下这不是一个好的选择,因为这个类被子类化了很多次,而且我只想在基类中处理这种隐式更改。所以它不一定需要在构造函数中,但必须在除 go() 以外的方法中。


引入另一种包装类型,只是为了消除歧义:

//  badly named, choose something domain-specific
case class ListHolder(theList: List[Int])

def someMethod()(implicit holder: ListHolder) {
  val xs = holder.theList
  // uses xs ...
}

class A()(implicit xs: List[Int]) {

  implicit val other = ListHolder(42 :: xs) // compiles

  def go() {
    // xs is never considered for the implicit param to someMethod()
    // because it's now the wrong type
  }
}

这也使得代码更加自我记录,因为这两个隐式变得非常明显not一且相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala:重写构造函数的隐式参数 的相关文章

  • 带可变参数的 Spark UDF

    如文档中所示 列出最多 22 个参数是唯一的选择吗 https spark apache org docs 1 5 0 api scala index html org apache spark sql UDFRegistration ht
  • 如何设置 jacoco4sbt 来处理 Play 中主模块和子模块中的类?

    我有一些问题要解决雅可可4sbt https github com sbt jacoco4sbt正在使用我的 Play 2 3 4 项目 我的项目由 3 个子模块组成 common api and frontend并且没有代码app根文件夹
  • 如何从java程序的main方法调用Scala程序的main方法?

    假设我在 Java 项目中有一个 Scala 类和一个 Java 类 scala 类如下所示 class Sam def main args Array String Unit println Hello 如何从同一项目中存在的 java
  • SBT 对 Scala 类型感到困惑

    SBT 抛出以下错误 value split is not a member of String String error filter arg gt arg split delimiter length gt 2 对于以下代码块 impl
  • Scala 匿名函数中的 return 语句

    为什么显式 return 语句 使用return关键字 在匿名函数中从封闭的命名函数返回 而不仅仅是从匿名函数本身返回 例如 以下程序会导致类型错误 def foo String x Integer gt return x foo 我知道建
  • Scala:“递归值...需要类型”,但我只使用 Java 类型

    object Rec extends App val outStream new java io ByteArrayOutputStream val out new java io PrintStream new java io Buffe
  • Scala 2.8 中 <:<、<%< 和 =:= 的含义是什么?它们的文档在哪里?

    我可以在 API 文档中看到Predef https scala lang org files archive api 2 8 2 scala Predef 24 html它们是通用函数类型 From gt To 的子类 但仅此而已 嗯什么
  • 在 Scala 中创建任意类作为 monad 实例

    为了使任何东西都可以在 monad 上下文中操作 如果使用 Haskell 我只需在任何地方为给定类型添加类 Monad 的实现 所以我根本不接触数据类型定义的来源 像 人造的东西 data Z a MyZLeft a MyZRight a
  • 如果需要,Akka actor 可以从邮箱中删除消息吗?

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

    我有一个DataFrame 该DataFrame有两列 value 和 timestamp timestmp 是有序的 我想获取DataFrame的最后一行 我该怎么办 这是我的输入 value timestamp 1 1 4 2 3 3
  • 使用 lift-json 反序列化具有 Map[String,Any] 属性的案例类

    几天来我一直在努力解决一些通过 lift json 应该很简单的事情 将映射序列化为 JSON 我知道 我知道 根对象还不能是 List 或 Map 但我愿意暂时包装在一个案例类中 但我仍然无法让它工作 感谢一些堆栈溢出帮助 我已经可以进行
  • 将 Scala AST 转换为源代码

    给定一个 Scala AST 有没有办法生成 Scala 源代码 我正在研究通过解析 分析其他 Scala 源代码来自动生成 Scala 源代码的方法 任何提示将不胜感激 我已经成功使用Scala 重构 http scala refacto
  • 在 scala 中混合类型参数和抽象类型

    我正在尝试使用的答案前面的问题 https stackoverflow com questions 2059601 circular type parameters definition in scala实现一个小型图形库 这个想法是将图视
  • Scala案例类使用浅拷贝还是深拷贝?

    case class Person var firstname String lastname String val p1 Person amit shah val p2 p1 copy p1 firstname raghu p1 p2 p
  • 如何使用 *non-case* 类通过 Scala 从 JSON 反序列化?

    我正在编写一个 Scala 应用程序 需要序列化和反序列化 JSON 某些 JSON 对象具有超过 22 个字段 因此我无法使用案例类 并且也无法更改格式 我找到的所有 Scala JSON 库都只能 轻松地 与案例类一起使用 而不是与普通
  • 如何为每个用户或系统范围配置 Ivy 缓存目录?

    我在用SBT http www scala sbt org 作为我构建 Scala 项目的构建工具 我的问题是 我无法配置 SBT 将依赖项下载到我的用户主目录 因此 我正在寻找每个用户甚至更好的系统范围设置来告诉 SBT 将 Ivy 缓存
  • 具有定期更新的静态数据集的结构化流

    将流媒体与静态数据集合并是结构化流媒体的一个重要功能 但在每个批次中 数据集都会从数据源刷新 由于这些源并不总是那么动态 因此在指定的时间段 或批次数 内缓存静态数据集会提高性能 在指定的时间段 批次数之后 将从源重新加载数据集 否则从缓存
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • SBT - 使用汇编时多项目合并策略和构建 sbt 结构

    我有一个由多个较小项目组成的项目 其中一些项目相互依赖 例如 有一个依赖于 commons 项目的实用程序项目 其他项目可能依赖于公用事业或公共设施 也可能不依赖于两者 在 build sbt 中 我在文件末尾有程序集合并策略 以及程序集中
  • 一起调用distinct和map会在spark库中抛出NPE

    我不确定这是否是一个错误 所以如果你这样做 d spark RDD String d distinct map x gt d filter equals x 您将获得 Java NPE 但是如果你做了一个collect之后立马distinc

随机推荐

  • 哪些手机支持哪种 J2ME(Java 微型版)规范?

    我只是找不到关于哪些移动设备支持哪些 Java 的最新图表 微版版本 我特别感兴趣诺基亚智能手机以及他们对新事物的支持JME 3 0 我想知道Sun似乎没有提供此类信息 如果您知道的话 请给我一些链接 EDIT 我可能把事情搞混了 MIDP
  • 返回带有字段名称而不是别名的 pydantic 模型作为 fastapi 响应

    我试图用定义的字段名称而不是别名返回我的模型 class FooModel BaseModel foo str Field alias bar app get gt FooModel return FooModel bar baz 响应将是
  • jsTree 拖放按类限制文件夹

    如何通过类名 class locked 锁定文件夹上的拖动功能 同时锁定其他要拖到该文件夹 中的文件夹class locked 我想要一个既具有拖放功能又具有上下文菜单的设置 如果节点的类名 锁定 我只想禁用上下文菜单的编辑以及拖入此文件夹
  • 使用 python 有效提取 1-5 克

    我有一个 3 000 000 行的巨大文件 每行有 20 40 个单词 我必须从语料库中提取 1 到 5 个 ngram 我的输入文件是标记化的纯文本 例如 This is a foo bar sentence There is a com
  • 用于从 Google Sheets URL 中提取电子表格 ID 和工作表 ID 的 JavaScript 正则表达式

    我想要 Javascript 正则表达式从 google 表格 URL 中提取电子表格 ID 和工作表 ID Sheets google com 电子表格的 URL 如下所示 https docs google com spreadshee
  • 删除 d3js 不工作的事件侦听器

    我有一个 SVG 结构 里面有一些形状 我想在单击形状时触发一个事件 在 SVG 上单击时触发另一个事件 问题是 SVG 事件总是被触发 为了防止这种情况 我禁用了形状的事件冒泡 我还尝试使用 d3 禁用该事件 但似乎不起作用 还尝试使用本
  • 朱莉娅 git 错误

    几个月前我在使用 Julia 最近我想再次使用它 我想要一个新版本 所以我删除了以前的版本和我拥有的所有软件包 现在 安装新版本后 0 6 2 我无法使用任何 Pkg 命令 使用后会出现以下错误init add or update 错误 G
  • 通过 pod 访问 kubernetes python api

    所以我需要通过 pod 连接到 python kubernetes 客户端 我一直在尝试使用config load incluster config 基本上遵循以下示例here https github com kubernetes cli
  • Spearman 与底座 R 的尺距距离

    给定两个排列 v1 1 4 3 1 5 2 v2 1 2 3 4 5 1 如何计算以 R 为基数的 Spearman 尺尺距离 所有元素的总位移 可灵活用于任意两种尺寸排列n 例如 对于这两个向量 如下 1被感动了2地点来自v1 to v2
  • 如何为多个开发人员使用 git

    对于经验丰富的 Git 用户来说 这是一个非常简单的问题 我已经在 git 托管上创建了存储库并设置了我的电脑 git init git remote add origin git sourcerepo com git 然后 经过一些更改后
  • 爪哇。 GUI WindowBuilder 通过单击按钮从 JTextField 读取

    I m useing WindowBuilder and I want to ask how to search in a text file for specific word which I enter to JTextField by
  • 如何在 Python 中使用 Selenium 获取
    1. 元素的长度?

    我有一个 ol 在我的 HTML 中列出 如下所示 ol li class foo li li class foo li li class foo li li class foo li ol 我需要做的是验证 ol 列表包含 li 内的项目
  • ReaderWriterLockSlim 和 async\await

    我有一些问题ReaderWriterLockSlim 我无法理解它是如何发挥作用的 My code private async Task LoadIndex if File Exists FileName index txt return
  • 在 vi 中删除连续的重复行而不排序

    这个问题 https stackoverflow com questions 351161 removing duplicate rows in vi已经解决了如何删除重复行 但强制首先对列表进行排序 我想执行删除连续重复行步骤 即uniq
  • 带数组的 SwitchMap 运算符

    我正在尝试学习 rxjs 和 Observable 的一般概念 并且有一个场景 我有一类
  • 如何防止引用的包含搜索当前源文件的目录?

    海湾合作委员会提供 I 选项 其中 I之前的目录 I 搜索引用的包含 include foo h and I以下目录 I 搜索括号内的包含 include
  • 在verilog中将wire值转换为整数

    我想将电线中的数据转换为整数 例如 wire 2 0 w 3 b101 我想要一个将其转换为 5 并将其存储在整数中的方法 我怎样才能以比这更好的方式做到这一点 j 1 for i 0 i lt 2 i i 1 begin a a w i
  • 如何通过 Google Drive API 使用刷新令牌生成访问令牌?

    我已完成授权步骤并获得访问令牌和刷新令牌 接下来我应该做什么来使用我通过 google Drive API 存储的刷新令牌生成访问令牌 由于我在 Force com 上工作 因此我无法使用任何 sdk 因此请建议直接通过 API 实现它的方
  • 经典 asp - 仅接收肥皂响应的一部分

    我试图从经典 asp 调用肥皂请求 它将在稍后更新 但现在它仍然是经典 asp 但我只得到一半的响应 当我在 SoapUI 中使用请求字符串时 我得到了我正在寻找的响应 但在 asp 中我只收到了部分响应 ASP 请求 Set oXmlHT
  • scala:重写构造函数的隐式参数

    我有一个类 它采用隐式参数 该参数由类内部方法调用的函数使用 我希望能够覆盖该隐式参数 或者从其源复制隐式参数 举个例子 def someMethod implicit p List Int uses p class A implicit