问题标签 [dotty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 如何在 dotty 中使用缩小的 String 类型的元组大小写头部编写匹配类型模式?
我目前正在尝试了解 Scala 3/dotty 中的新功能。所以我想重做一些我以前用 shapeless 尝试过的东西。"a" :: "c" :: "f" :: HNil
给定一个缩小字符串类型的异构列表(在我理解的无形中,它会是无形的,并且可以使用元组("a", "c", "f")
),我想根据一些映射替换类型。例如考虑以下伪代码:
为此,我想出了以下代码。重新映射单个缩小的 String 类型正在工作。但我也无法让它与元组一起使用:
我得到的编译错误Type argument s does not conform to upper bound String
在以下行:
我使用了 dotty 版本0.18.1-RC1
,因为它是 Scastie 上最新可用的版本。这是您可以尝试的链接:https ://scastie.scala-lang.org/BKzhEV7PRiKyfQ3CE2vjww
这不支持吗,有没有办法实现这一点,即如何进一步限制匹配类型中的类型模式(我试过case (s <: String) *: rest =>
,但编译器失败并出现错误:)scala.MatchError: Parens(Ident(s)) (of class dotty.tools.dotc.ast.untpd$Parens)
?还有更好的方法来实现我总体上尝试做的事情(在 dotty 的当前能力范围内,比如erased
and inline
)?
scala - 如何使隐式可用于内部功能
我想在包装函数中定义隐式值并使其可用于内部函数,到目前为止,我设法通过从包装器传递隐式变量来做到这一点:
是否可以避免implicit b: B =>
并implicit val b: B = B()
提供给内部功能块?
scala - 使用 doc 命令编译和运行 dotty 代码
我克隆了dotty并将其添加到我的PATH(我是Linux用户)之后,我使用dotty创建了HelloWorld项目并尝试使用dotc
和dotr
命令编译和运行它,如下所示:
我收到了这个错误:
有什么建议么 ?
scala - 新的 dotty 运行时完全死在我身上
周六早上在这里。尝试学习新的 Scala 编译器 dotty。
使用安装在我的 Mac 上
安装成功。我有版本
创建的目录
把这段代码写在Hello.scala
我能够编译它
.class
有一堆.tasty
文件
接下来我做了
现在我得到了一个错误的大规模“爆炸”,dotr 运行时完全死亡并退出。
我做了什么导致这次爆炸?这不是一个友好的错误消息。
scala - Dotty 无法推断具有抽象类型的类型参数特征的通用 Scala 函数的结果类型
一个简单的价值层次
想象一下这个简单的特征Value
,其中每个实现类都有value
某种类型T
。
我们有两个不同的实现类分别表示Int
和String
值。
键入安全的值选择
如果我们有一个List
值,我们希望有一种类型安全的方式来选择特定类型的所有值。类Values
及其伴随对象帮助我们做到这一点:
所有这些在 Scala 2.13 和 Dotty 0.20.0-RC1 中都可以正常工作,因此有一个混合值列表……</p>
…我们可以选择元素并将它们作为正确的类型返回——所有这些都在编译时检查:
在 Dotty 中选择一个值Option[T]
失败
但是,如果我们添加这个函数来选择值作为它们的T
类型(即Int
和String
)并将其作为Option
…</p>
…然后在 Scala 2.13 中一切正常:
但在 Dotty 0.20.0-RC1 中,这不能编译:
我们可以通过添加一个类型参数来解决这个问题,getValueInnerOption
它将返回类型和抽象类型T
联系在一起,并允许我们指定返回类型。
不幸的是,这意味着我们将不得不在调用站点添加T
(ie Int
or String
) 的实际类型,这很遗憾,因为它只是样板文件。
Dotty 中的错误或该怎么办?
似乎 Dotty 已经知道上限T
是什么,但无法将该知识传播到函数的结果类型。String
如果尝试从 an请求 a 可以看出这一点IntValue
:
那么原始代码(没有类型参数U
)是否可以在最终的 Scala 3.0 中工作,还是需要以不同的方式编写?
scala - 在 scala 2 或 3 中,是否可以在运行时调试隐式解析过程?
在 Scala 语言中,隐式解析通常在编译时完成,有时会引发混淆错误信息,此类错误的一个著名示例是当无形 Generic 引发错误信息时,例如:
(详见https://books.underscore.io/shapeless-guide/shapeless-guide.html)
解决这个问题的方法是在运行时运行隐式解析算法(内部应该是图查询算法),这至少有两个好处:
调试工具可用于逐步重现解决过程,因此即使错误信息和文档不完整,也很容易发现错误。
在许多情况下,类型信息可能无法在编译时确定(例如,类型取决于控制流)。如果隐式转换不能延迟到运行阶段,定义隐式转换的许多好处将无效。
所以我的问题是,Scala 2.x 或 Dotty 中是否存在此功能?还是在路线图上?
非常感谢您的意见。
scala - 如何在 Dotty 中使用给定?
我正在查看页面Dotty
下的文档Contextual Abstractions
,我看到了Given Instances
.
给定的实例(或者简单地说,“给定的”)定义了某些类型的“规范”值,这些值用于综合给定子句的参数。例子:
但是文档中的这个示例从未解释过如何使用given
. 我拉了测试Dotty
示例项目并尝试使用它,但我不太了解它。
它是一个新的关键字吗?我们进口它吗?还是我错过了什么。
scala - 如何使用宏在 Dotty 中生成一个类?
是否可以在 Dotty, Scala 3 中生成带有宏的新类?
兹拉亚
scala - 如何在dotty中解包元组中的元素类型?
假设我有一个类定义为:
我想编写一个通用方法,将 tuple 解压缩为type(Box[A1](a1), .., Box[An](an))
的 tuple 。(a1, .., an)
(A1, .., An)
我试过Match Types
没有运气:
scala - 如何将两个元组与兼容的类型结合起来?
假设我有两个元组,第一个是类型为值的元组(V1, V2, .., Vn)
,
第二个是类型为函数的元组(V1 => V1, V2 => V2, .., Vn => Vn)
。
现在我想将这两个元组(f1(v1), v2(v2), .., fn(vn))
与 type结合起来(V1, V2, .., Vn)
。
我不知道如何在scala 3.0(即dotty)中得到这个。
编辑:我查看了 shapeless 的源代码并得到了一个(部分工作)解决方案:
我不知道为什么apply
方法的返回会丢失它的类型。