2 不同类中具有相同名称的扩展方法在 Scala 3 中不起作用?

2024-02-20

我有以下场景:

case class B(v: String)
case class A(bs: Seq[B])

extension(a: A)
  def doit() = a.bs.map(_.doit()) // here is the exception

extension(b: B)
  def doit() = println("OK: ${b.v}")

这给了我以下编译异常:

value doit is not a member of B.
An extension method was tried, but could not be fully constructed:

    _$1

在那儿限制在扩展方法的命名中Scala 3?

请参阅此处的示例Scastie https://scastie.scala-lang.org/dUp8oopfSji1RCMvL8gTnA


将评论转化为答案,spec https://dotty.epfl.ch/docs/reference/contextual/extension-methods.html说两个扩展名都被翻译成def extension_doit.

显式调用扩展方法:

-- [E044] Cyclic Error: so.scala:7:45 -----------------------
7 |  extension(a: A) def doit() = a.bs.map(b => extension_doit(b)())
  |                                             ^
  |           Overloaded or recursive method extension_doit needs return type

这与调试原始示例时出现的错误相同:

>>>> StoredError: Overloaded or recursive method extension_doit needs return type
[snip]
-- [E008] Not Found Error: so.scala:7:42 --------------------
7 |  extension(a: A) def doit() = a.bs.map(_.doit())
  |                                        ^^^^^^
  |        value doit is not a member of B.
  |        An extension method was tried, but could not be fully constructed:
  |
  |            _$1

过载分辨率 https://dotty.epfl.ch/docs/reference/changed-features/overload-resolution.html被显式改进或扩展以处理这种正常的重载情况,这些重载可能仅在后面的参数列表中进行区分。所以显然我们应该意识到脱糖形式是超载的。

Scala 2 也抱怨:

scala> object X { def f(i: Int) = f("") ; def f(s: String) = f(42) }
                                                              ^
       error: overloaded method f needs result type
                                   ^
       error: overloaded method f needs result type
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2 不同类中具有相同名称的扩展方法在 Scala 3 中不起作用? 的相关文章

随机推荐

  • npm install 缺少模块

    在我能跑之前gulp在我的项目中我需要运行npm install 除了在我的计算机上之外 这都有效 因为我收到以下错误 Error Cannot find module socket io at Function Module resolv
  • 加密会话变量有安全方面的好处吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 所有字母的正则表达式

    我需要所有字母表的正则表达式 我有一个输入和目标文本 它们都可以属于不同的字母表 我的意思是它们可以属于中文 拉丁文 西里尔文和任何其他字母 我需要一个用于多语言输入和多语言目标文本的正则表达式 有人对此有任何想法吗 我该如何编写这个正则表
  • 容器中的共享库

    对于两个进程A和B 都使用库libc so libc so只加载到内存一次 当 A 和 B 都运行在同一主机和同一 rootfs 上时 这是正常情况 对于容器来说 如果A和B运行在不同的容器中 A和B是否共享相同的内存区域 例如 image
  • 在scala Spark2中运行saveAsNewAPIHadoopDataset到hbase时出现空指针异常

    我正在使用 saveAsNewAPIHadoopDataset 将 RDD 保存到 Hbase 中 以下是我的工作创建和提交 val outputTableName test3 val conf2 HBaseConfiguration cr
  • Excel VBA - 连接两个数组

    我需要将两个数组 vd 和 vd1 连接到 vdu 中 ReDim vdu 1 To UBound vd 1 UBound vd1 1 1 To 1 For i 1 To UBound vd 1 vdu i 1 vd i 1 Next i
  • VB 中的 With 语句中有多个对象吗?

    我在 VB 中使用了很多标签With语句来设置它们的属性 Problem有什么办法我可以做类似以下的事情 With lblA lblB lblC fontColor color Red End With 这可能吗 还是我必须手动执行With
  • 删除 BeautifulSoup 分解后变空的行

    我试图从文件中删除某些 HTML 标签及其内容BeautifulSoup 如何删除应用后变为空的行decompose 在这个例子中 我想要之间的线a and 3消失 因为这是 span span 块了 但到底不行 from bs4 impo
  • Django ..“加入”查询?

    伙计们 Django 中的 join 查询如何或在哪里 我认为 Django 没有 加入 但是我将如何加入 Thanks 如果您使用模型 则 select lated 方法将返回您在该模型中设置的任何外键 最多达到您指定的限制 的对象
  • Firebase + React Native:离线身份验证

    我在 React Native iOS 应用程序中使用 Firebase 主要用于存储用户数据和用户身份验证 效果很好当设备确实有可用的网络连接时 当谈到Firebase的离线功能时 它看起来像这样 问题 在没有网络连接的情况下启动应用程序
  • 在 C# 中有效读取超大文件。目前使用 StreamReader

    我有一个大小为 50GB 及以上的 Json 文件 以下是我编写的用于读取一小部分 Json 的内容 我现在需要修改它以读取大文件 internal static IEnumerable
  • 通过 Akka IO 和套接字的协议缓冲区消息

    我碰到这篇博文 http cognitiveentity wordpress com 2012 02 23 simpler akka io example 我发现它很棒并且很有启发性 展示了如何对发送到 Akka IO 套接字服务器的字符串
  • Python 标准库中有哪些可用的“工具”[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前知道两个工具 Base64 编码器 解码器 python m base64 e
  • 未捕获的类型错误:无法调用未定义的方法“toLowerCase”

    我在进行一些简单的 jQuery DOM 操作时遇到了一个非常模糊的错误 触发错误的行如下 this closest tr remove 如标题所述 错误是 未捕获的类型错误 无法调用未定义的方法 toLowerCase 在文件中 jque
  • Sitecore 与 LDAP - 以编程方式进行身份验证

    我正在 Sitecore 中创建一个应用程序 我只希望用户可以通过直接 URL 来使用它 我希望针对 LDAP 进行身份验证 我尝试直接进入应用程序并让它重定向到自动登录页面并将我重定向到应用程序 但它没有这样做 相反 它带我进入了 Sit
  • 自动完成报价 - 从报价中退出并将光标移动到结束光标之后

    我喜欢它自动完成单引号和双引号 但是如何从引号内 退出 并将光标移动到结束引号的右侧 例如 我开始输入 string Hello World 当我完成字母 d 后 我的光标停留在那里 So is there a fancy way of h
  • Spring Boot 3、Postgres 和 JPARepository 方法(以 Pageable 作为参数)

    升级到 Spring Boot 3 后 发现以 Pageable 作为参数的 JPARepository 方法使用 postgres 作为数据库会抛出异常 MariaDb 没有问题 此外 直接在数据库上运行查询效果很好 Query valu
  • Pylons:如何编写自定义 404 页面?

    所以这个问题之前已被问过 https stackoverflow com questions 2706602 pylons changing the regular 404 not found page to a custom one 但没
  • SQL 查询获取一行以及关联行的计数

    我有两张表 如下所示 Articles ID Title 1 Article title 2 2nd article title Comments ID ParentID Comment 1 1 This is my comment 2 1
  • 2 不同类中具有相同名称的扩展方法在 Scala 3 中不起作用?

    我有以下场景 case class B v String case class A bs Seq B extension a A def doit a bs map doit here is the exception extension