1
57
这里有两个单独的问题:
我将从第二个问题开始,因为答案更简单:
这个
这个
第一个问题的答案稍微复杂一些。在许多情况下,包括我的
然而,在其他情况下,我们可以利用这样一个事实,即有时无形状(我将具体讨论
哪里
稍后)使用类型成员而不是类型参数。例如,假设我们要编写一个方法,该方法将返回一个函数,该函数将指定的case类类型转换为
现在我们可以这样使用它:
我们会得到一个很好的
Scala不支持类型参数的部分应用,因此每次调用这个(假设的)方法时,我们都必须指定两个类型参数,因为我们要指定
这使得它基本上毫无价值,因为整个要点是让通用机器来计算表示。
通常,只要类型由类型类的其他参数唯一确定,Shapeless就会使其成为类型成员而不是类型参数。每个case类都有一个泛型表示,因此
使唯一确定的类型成为类型成员而不是类型参数意味着如果我们只想将它们用作路径依赖类型(如第一个
作为旁注,类型类的类型“参数”(我使用引号,因为它们可能不是 参数 在文字Scala意义上)被称为 "functional dependency" 在Haskell这样的语言中,但你不应该觉得你需要了解Haskell的函数依赖性,才能了解Shapeless中的情况。 |
Terio · Typescript:使用变量的值创建自定义类型 1 年前 |
Kareem Adel · 创建函数类型(TypeScript接口) 2 年前 |
MatÄj VondráÄek · 如何在c#方法中传递类型? 2 年前 |
kreo · 为什么&[T]参数也接受&Vec? 6 年前 |
Jiji · 将简单对象强制转换为简单的通用接口 6 年前 |