- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用依赖元组列表对依赖映射进行编码。这是我所拥有的不起作用的东西:
class DTuple[Key, ValueMap[_ <: Key]](val first: Key)(val second: ValueMap[first.type])
type DKey = "Tag" | "Versions" | "Author"
type DMapping[X <: DKey] = X match {
case "Tag" => String
case "Versions" => Array[String]
case "Author" => String
}
def mkString(d: DTuple[DKey, DMapping]) = d.first match {
case _: "Tag" => "#" + d.second
case _: "Versions" => d.second.mkString(",")
case _: "Author" => "@" + d.second
}
我得到的只是
[error] -- [E008] Not Found Error: Main.scala:21:35
[error] 21 | case _: "Versions" => d.second.mkString(",")
[error] | ^^^^^^^^^^^^^^^^^
[error] | value mkString is not a member of Main.DMapping[(d.first : Main.DKey)]
我想不出模式匹配 d.second
的好方法,使其类型依赖于 d.first。我可以添加 .asInstanceOf[Array[String]]
和 .asInstanceOf[String]
但这不是这里的目标,我正在尝试对代码进行类型检查。
最佳答案
可能有更好更简单的方法来做到这一点,但是:
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter.ISO_ZONED_DATE_TIME
// This is a case case solely for the unapply method, you could implement it on your own
case class DTuple[Key, ValueMap[_ <: Key]](first: Key)(val second: ValueMap[first.type])
type DKey = "Tag" | "Versions" | "Author" | "BuildTime"
type DMapping[X <: DKey] = X match {
case "Tag" => String
case "Versions" => Array[String]
case "Author" => String
case "BuildTime" => ZonedDateTime
}
// the DTuple("<value>") is used at runtime to check the string (DKey) value
// the DTuple["<value>", DMapping] type hint makes dotty see the `d` value as the correct type, hence infering the type of d.second too
def mkString(dt: DTuple[DKey, DMapping]): String = dt match {
// this would fail at runtime as e.g DTuple("Tag") would enter this case (the `DTuple["BuildTime", DMapping]` is unchecked at runtime
// case d: DTuple["BuildTime", DMapping] => d.second.format(ISO_ZONED_DATE_TIME)
// this doesn't compile because `d.second`'s type is still 'DMapping[(d.first : DKey)]', not 'DMapping["BuildTime"]'
// case d@DTuple("BuildTime") => d.second.format(ISO_ZONED_DATE_TIME)
case d@DTuple("Tag"): DTuple["Tag", DMapping] => d.second
case d@DTuple("Versions"): DTuple["Versions", DMapping] => d.second.mkString(", ")
case d@DTuple("Author"): DTuple["Author", DMapping] => d.second.toString
case d@DTuple("BuildTime"): DTuple["BuildTime", DMapping] => d.second.format(ISO_ZONED_DATE_TIME)
}
object Main extends App {
List(
DTuple[DKey, DMapping]("Versions")(Array("1.0", "2.0")),
DTuple[DKey, DMapping]("Tag")("env=SO"),
DTuple[DKey, DMapping]("Author")("MK"),
DTuple[DKey, DMapping]("BuildTime")(ZonedDateTime.now())
).foreach { dt =>
println(mkString(dt))
}
}
打印
1.0, 2.0
env=SO
MK
2020-10-23T21:04:06.696+02:00[Europe/Paris]
关于scala - Scala 3/Dotty 中的依赖元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64490065/
我浏览了 documentation并找到了几种如何为类型类实例定义临时行为的方法。这是原始示例: trait Ord[T] { def compare(x: T, y: T): Int ex
我一直在阅读有关 Dotty 的文章,因为它看起来即将成为 Scala 3,并注意到类型投影被认为是“不健全的”并从语言中删除...... 这似乎很糟糕,因为我已经看到了几个非常有用的用例。例如: t
有没有办法将特征混合到 Dotty 或 Scala 中的现有对象中? class SomeClass trait SomeTrait // This works, but it's not what
我正在阅读 斯卡拉 3 并发现 多蒂 .我试图了解它是什么。我在某处读到“它是新的编译器”,在某处读到“它是 Scala 3 的一部分”,在某处我读到“Dotty 是新的 Scala 3”。 有人可以
据报道,Dotty 将具有类型参数的类脱糖为具有类型成员的类,例如: class C[T, U] { } // class C { type C$T type C$U } Dotty 如何像
据报道,Dotty 将具有类型参数的类脱糖为具有类型成员的类,例如: class C[T, U] { } // class C { type C$T type C$U } Dotty 如何像
周六早上在这里。尝试学习新的 Scala 编译器 dotty。 安装在我的 Mac 上使用 brew install lampepfl/brew/dotty 安装成功。我有版本 dotr -versi
已经讨论了扩大联合类型 here但我似乎无法找到以下案例的答案 让我们从以下内容开始 val x = List(1, 2, "a") 这个异构列表被推断为 List[Any]就像在 Scala 2 中
我正在尝试通过 Scala 3.0.0-M2 中的宏获取函数名称 我想出的解决方案使用 TreeAccumulator import scala.quoted._ inline def getName
是否可以在 Dotty, Scala 3 中生成一个带有宏的新类? 兹拉亚 最佳答案 目前在 Dotty 中只有(种类)def macros .目前没有(种类)macro annotations ,这
假设我有一个类定义为: case class Box[A](a: A) 我想编写一个通用方法,将元组 (Box[A1](a1), .., Box[An](an)) 解包为类型为 (a1, .., an
我正在尝试使用依赖元组列表对依赖映射进行编码。这是我所拥有的不起作用的东西: class DTuple[Key, ValueMap[_ String case "Versions"
一个简单的值层次结构 想象一下这个简单的特征 Value每个实现类都有一个 value某种类型 T . trait Value { type T def value: T } 我们有两个不同的
Scala Dotty 官方团队展示了来自 ( https://d-d.me/talks/scalaworld2015/#/12 ) 的这个例子 object DaysOfTheWeek { ob
在 this question从 2013 年开始,Odersky 先生指出,“现在判断”像 Scalaz 这样的库是否能够在 Dotty 下存在(至少在目前的状态下),由于高级类型和存在类型的阉割。
我测试了以下结构类型的代码: trait Data object Main { def main(args: Array[String]): Unit = { val data = n
最近talk在 Strange Loop 上,Martin Odersky 阐述了他对 Scala future 版本 Dotty 的愿景。我知道这是正在进行中的工作,由于许多可能的向后兼容性问题,它
我测试了以下结构类型的代码: trait Data object Main { def main(args: Array[String]): Unit = { val data = n
我目前正在运行 Backtrack 5R3 32 位版本,当我在 dotty 或 lneato 中右键单击时,我得到了菜单,但我无法选择任何内容。当我将鼠标悬停在它们上面时,它不会突出显示,而当我松开
我目前正在尝试了解 Scala 3/dotty 中的新功能。所以我试图重做我之前尝试过的无形的东西。给定一个变窄的字符串类型的异构列表(在无形中是 "a" :: "c" :: "f" :: HNil,
我是一名优秀的程序员,十分优秀!