为什么此类型约束对于 List[Seq[AnyVal 或 String]] 失败

2023-12-04

我正在自学Scala并遇到了这个。继以下优秀答案之后Link,假设我有以下代码:

object Example extends App {
  val x = Seq(1, 2, 3)
  val y = Seq("1", "2", "3")

  class Or[A, B]
  implicit def orA[A, B](implicit ev: A): Or[A, B] = new Or
  implicit def orB[A, B](implicit ev: B): Or[A, B] = new Or

  def f1[T](seq: Seq[T])(implicit ev: Or[T =:= Int, T =:= String]) = {
    println(seq)
  }

  f1(Seq(1, 2, 3))
  f1(Seq("1", "2", "3"))
}

这样编译一切都很好。但现在假设我更改了该函数,以便它采用序列列表,而不仅仅是序列,然后尝试以下操作:

object Example extends App {
  val x = Seq(1, 2, 3)
  val y = Seq("1", "2", "3")

  class Or[A, B]
  implicit def orA[A, B](implicit ev: A): Or[A, B] = new Or
  implicit def orB[A, B](implicit ev: B): Or[A, B] = new Or

  def f1[T](seq: List[Seq[T]])(implicit ev: Or[T =:= Int, T =:= String]) = {
    println(seq)
  }

   f1(List(Seq(1, 2, 3), Seq("1", "2", "3")))
}

然而这失败了。错误信息是:

无法找到参数 ev 的隐式值:conusviz.Example.Or[Any =:= Int,Any =:= String]

我的问题是,为什么会发生这种情况?我只是将编译器应该能够推断出另一种类型的东西包装起来。有办法让它发挥作用吗?

我希望该函数采用 Int (或确实 AnyVal)或字符串列表并且仍然可以工作。我只是有点困惑为什么编译器会感到困惑。从学习的角度来看,任何关于编码答案的解释都将受到深深的赞赏。


Seq(1, 2, 3)有类型Seq[Int], Seq("1", "2", "3")有类型Seq[String]. Both Seq[Int] and Seq[String]是以下子类型Seq[Any]. So List(Seq(1, 2, 3), Seq("1", "2", "3"))有类型List[Seq[Any]].

如果你想要类型Seq[Int] and Seq[String]要保存,那么你不需要List but HList

import shapeless.{HList, HNil}
import shapeless.ops.hlist.LiftAll

def f[L <: HList](seq: L)(implicit ev: LiftAll[({type l[T] = Or[T =:= Seq[Int], T =:= Seq[String]]})#l, L]) = {
  println(seq)
}

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

为什么此类型约束对于 List[Seq[AnyVal 或 String]] 失败 的相关文章

  • Spark SQL中如何按列降序排序?

    I tried df orderBy col1 show 10 但它是按升序排列的 df sort col1 show 10 也按升序排序 我查看了 stackoverflow 发现的答案都已过时或称为 RDD https stackove
  • C 函数声明中的无类型参数

    最近我一直在查看 Steven Skiena 的在线资源中的一些 C 示例代码 算法设计手册 http www cs sunysb edu skiena algorist book programs 并且对他的一些函数调用的语法感到困惑 诚
  • Playframework 2.0 在视图模板中定义函数

    我正在开发一个使用 PlayFramework 2 0 的项目 在阅读了一些 scala 之后 我想在视图模板中嵌入一些动态代码 所以 我做了以下事情 def getMystring sequence Int if patternForm
  • 为什么我的代码在 Spark Pregel 中执行需要很长时间?

    我在 Spark 中使用 Pregel 编写了处理图形的代码 但对于小数据集来说 它的执行速度非常非常慢 我以前用pregel写过程序 但是这段代码运行速度确实很慢 我的集群由 2 个工作人员组成 每个都有核心 i5 CPU 和 6 GB
  • 组合部分函数

    我有两个偏函数f and g 它们没有副作用并且执行速度快 将它们组合成另一个部分函数的最佳方法是什么h这样h isDefinedAt x iff f isDefinedAt x g isDefinedAt f x 如果h是一个返回一个函数
  • 自动将通配符导入重构为 IntelliJ 中的显式导入(适用于 Scala/Java)

    考虑下面的代码 是否可以让 IntelliJ 自动将每个通配符导入重构为显式导入 无论范围内使用什么 例如import scalatags JsDom all into import scalatags JsDom all ol li di
  • 如何识别远程参与者?

    我有一个远程参与者 客户端 它正在向另一个远程参与者 服务器 注册 然后注销 使用关闭挂钩 然而 虽然服务器接收到注销 但实际sender财产是一个不同的 Channel 对象 所以在我的服务器日志中我有 Registered new cl
  • scala.concurrent.blocking - 它实际上做了什么?

    我花了一段时间学习 Scala 执行上下文 底层线程模型和并发性的主题 你能解释一下通过什么方式吗scala concurrent blocking 调整运行时行为 and 可以提高性能或避免死锁 如中所述scaladoc http www
  • 对列表中的相邻元素进行分组

    假设我想编写一个函数来执行此操作 输入 1 1 3 3 4 2 2 5 6 6 输出 1 1 3 3 4 2 2 5 6 6 它将相同的相邻元素分组 这个方法的名称应该是什么 此操作有标准名称吗 In 1 1 3 3 4 2 2 5 6 6
  • 从泛型类继承时需要 T 的列表或枚举器的建议

    我知道答案并不简单 而且我已经使用了一些 我认为丑陋的 木棍 我只是在寻找一些优雅的答案 抽象类 public interface IOtherObjects public abstract class MyObjects
  • Pandas 将 NULL 读取为 NaN 浮点数而不是 str [重复]

    这个问题在这里已经有答案了 给定文件 cat test csv a b c NULL d e f g h i j k l m n 其中第三列被视为str 当我对列执行字符串函数时 pandas已阅读NULLstr 作为一个NaN float
  • 如何从 System.Enum 转换为基本整数?

    我想创建一个通用方法 用于将任何 System Enum 派生类型转换为其相应的整数值 无需进行强制转换 最好无需解析字符串 例如 我想要的是这样的 Trivial example not actually what I m doing c
  • Pandas 在读取 SAS 文件时数据类型正确失败

    我有一个SAS数据集 http www principlesofeconometrics com sas cars sas7bdat当我运行它时 我在 SAS 上得到以下输出 我还有以下 Python 代码 它获取 sas7bdat 文件并
  • Scala:需要类类型,但找到了 T

    我发现了与此特定问题类似的问题 但是该问题是由于有人试图直接实例化 T 造成的 在这里 我试图创建一个特征 它是一个通用接口来扩展类并将它们自动存储在数据库中 例如 Riak 使用classOf T 使用 Scala 2 10 这是我的代码
  • obj[] 和 string[] 作为参数

    我在用Microsoft FSharp Reflection FSharpValue MakeUnion这需要一个Reflection UnionCaseInfo and an obj 可以为空 作为参数 但是 我得到了Type misma
  • 使用Apple80211 api时如何知道OPEN、WPA、WPA2、WEP等安全类型?

    Cydia中的Wifi WiFi FoRum等wifi扫描应用可以知道安全类型 使用 Apple80211 api 时 应用程序如何知道 OPEN WPA WPA2 WEP 等安全类型 CAPABILITIES 的值为 1057 1025
  • Dart,无法调用Generic的方法

    我正在尝试创建一个抽象数据模型 在其中传递数据并输入 a 然后返回列表 但是当我无法调用时T fromJson 方法 注意传递类型有方法fromJson class DataList
  • Scala 模式匹配打印漂亮

    是否有可能以某种方式编组部分函数 假设它总是只包含一种情况 进入某物人类可读的 假设我们有 Any 类型的集合 消息 List Any 以及使用模式匹配块定义的 PartialFuntion Any T 的数量 case object R1
  • 为什么/何时应该使用泛型方法?

    学习Java的时候遇到过通用方法 public
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal

随机推荐

  • NSStream、UTF8String 和 NSString...混乱的转换

    我正在构建一个数据包 通过 NSStream 发送到服务器 我试图用 ascii 代码 167 分隔两条数据 这就是服务器的构建方式 所以我需要尝试保持在这些范围内 unichar asciiChar 167 yields self set
  • “{ }”的 Visual Studio Code 格式

    我在Ubuntu上 Visual Studio Code 中的 C 自动 lints 就像 if condition true DoStuff 相反 我想做 if condition true DoStuff 我怎么做 我已经安装了C C
  • 在启用 cookie 的网站上使用 urlretrieve 的多线程网络抓取工具

    我正在尝试编写我的第一个 Python 脚本 经过大量谷歌搜索 我认为我已经完成了 然而 我需要一些帮助才能冲过终点线 我需要编写一个脚本来登录启用 cookie 的站点 抓取一堆链接 然后生成一些进程来下载文件 我的程序以单线程运行 所以
  • 同一项目的单独丰富代码片段范围

    我正在为我的网上商店创建丰富的片段 我使用的项目类型之一是 组织 类型 问题是我已经在网上商店的页眉中指定了组织名称和图像 并在页脚中指定了地址 介于两者之间的是网上商店的其余部分 其中包含所有产品 评论等 当我测试我的丰富网页摘要时htt
  • .NET MethodInfo 缓存可以清除或禁用吗?

    Per MSDN 呼叫Type GetMethods 将反映的方法信息存储在MemberInfo缓存 因此不必再次执行昂贵的操作 我有一个扫描程序集 类型的应用程序 寻找与给定规范匹配的方法 问题在于 由于 NET 依赖于方法元数据 因此内
  • sql server 中的顺序分组依据

    对于该表 ID Status Value 1 1 4 2 1 7 3 1 9 4 2 1 5 2 7 6 1 8 7 1 9 8 2 1 9 0 4 10 0 3 11 0 8 12 1
  • 在 Hadoop 中链接多个 MapReduce 作业

    在许多应用 MapReduce 的现实生活中 最终的算法最终都是几个 MapReduce 步骤 即Map1 Reduce1 Map2 Reduce2等等 因此 您可以将最后一次归约的输出作为下一个映射的输入 一旦管道成功完成 您 通常 就不
  • Firebase Child 必须是非空字符串且不包含

    我正在使用 Firebase 在 Swift 中编写一个基本的消息应用程序 我已经完成了应用程序的大部分内容 但在 ChatViewController 中我收到此错误消息 Terminating app due to uncaught e
  • XSLT:删除多余的空白字符,保留节点

    所以我的问题是这样的 我有一个在很多地方使用的转换文档 并且通常处理许多小型格式转换 在一种特定情况下 我需要从结果中删除空格 输出看起来像这样 n 某事非常重要 带有上标注释1 n 我尝试过以下变体
  • SSDT 部署后脚本

    我想在部署后忽略部署后脚本 在 SSDT 中将特定于分支的部署后脚本部署到生产环境后 如何存档 删除该脚本 有没有最佳实践 我以前所做的就是创建日志表并存储所有执行的脚本 这是表结构 CREATE TABLE dbo publish scr
  • 流媒体音频 (YouTube)

    我正在写一个CLI音乐媒体平台 其中一项功能是您可以直接从 CLI 播放 YouTube 视频 我真的不知道该怎么做 但这听起来是最合理的 我将使用那些可以从 YouTube 下载音乐的网站 例如 http keepvid com 然后我直
  • 按下 UIbutton 后如何更改 UIbutton 标题?

    按下 btn1 后 我无法更改 UIButton btn2 的标题 当我使用 definition settitle Show Word forState UIControlStateNormal它改变了原来的btn1 这是供您审核的代码
  • 当我使用 ISNUMERIC() 时,为什么转换失败?

    SELECT CAST Revenue Size M AS float FROM Raw Data A WHERE ISNUMERIC Revenue Size M 1 我收到错误 将数据类型 nvarchar 转换为 float 时出错
  • Delphi 2009 的通用链表

    我正在查看 Generics Collections 并注意到没有链接列表 当然 它们制作起来很简单 但我觉得很奇怪没有一个 或者我只是错过了 与新的现代数据结构相比 链表是否已经过时了 或者是否需要通用的链表 有人知道其中一个吗 你知道吗
  • 带有 Flutter 和 Firestore 的 GridView

    我正在尝试从云 Firestore 记录制作一个简单的 GridView 我遵循了很多视频教程 但没有成功 这是代码 import package flutter material dart import package cloud fir
  • Camera.main空引用异常

    我是 C 和 Unity 的新手 我已经阅读了整个论坛 但我仍然陷入困境 这是我收到的错误 NullReferenceException 未将对象引用设置为对象的实例 ClickToMove Update 位于 Assets Scripts
  • 具有隔离范围版本的指令冲突

    在我的 Angular 应用程序中 我有一个指令 可编辑 它是在 Angular 版本 1 2 0 rc 2 上编写的并且运行良好 但是当我将框架升级到版本 1 2 13 时 指令损坏了 我检查了其他版本的功能 但很困惑 因为指令仅适用于三
  • 调用一个不带参数的函数,尽管它需要一个 [K&R-C]

    它是 K R C 代码如下 http v6shell org history if c 看main 方法 有这一行 if exp 但函数 exp 被声明为 exp s 所以需要一个论证 为什么这有效 你为什么要这样做 归根结底 这是 Uni
  • Swift 4 中的 UIImagePickerController 内存泄漏 Xcode 9

    在我的应用程序中 当我使用UIImagePickerController 我以为是我的应用程序的问题 但是在搜索解决方案时我找到了Apple的示例 并且我还发现该示例具有相同的内存泄漏 您可以在以下 URL 中找到该示例 https dev
  • 为什么此类型约束对于 List[Seq[AnyVal 或 String]] 失败

    我正在自学Scala并遇到了这个 继以下优秀答案之后Link 假设我有以下代码 object Example extends App val x Seq 1 2 3 val y Seq 1 2 3 class Or A B implicit