gpt4 book ai didi

scala - Shapeless Witness 以及它如何给出实际的单例类型

转载 作者:行者123 更新时间:2023-12-01 00:10:21 27 4
gpt4 key购买 nike

我试图以无形的方式理解单例类型,并面临对单例类型编译时类型的误解。下面是一个例子:

val x: Witness.`120`.T = 120.narrow

它工作正常,但这种结构看起来很不寻常。什么是 Witness.120 ?在IDE中它指向一些宏函数 selectDynamic :
def selectDynamic(tpeSelector: String): Any = macro SingletonTypeMacros.witnessTypeImpl

具有编译时类型 Any并从结构来看 Witness.120.T type成员(member) T .这看起来很神奇......当一个人写下这样的东西时,任何人都可以解释一下实际发生的事情:
val x: Witness.`120`.T = //...

最佳答案

Witness创建所谓的基于文字的单例类型。文字类型意味着它是一种只能接受一个值的类型。

因此,如果您创建这样的函数:

def f(x: Witness.`120`.T) = x

它只接受整数 120 ,但不是 121 .

斯卡拉 2.13 literal types已集成到语言中,因此您可以简单地将其编写为:
def f(x: 120) = x

功能 narrow缩小值的类型 120来自一般 Int文字 120 .

关于scala - Shapeless Witness 以及它如何给出实际的单例类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59354968/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com