我可以在Java或Scala中定义这些类型吗?

麦可

这是关于编程语言中类型的一个非常基本的问题现在,我使用相同的类型Integer进行非常不同的计算:例如,用于计算阶乘和斐波那契数。

但是Integer对我来说,这些计算似乎是非常广泛的类型。如果我定义其他更具体的类型Factorial或者Fibonacci[Integer]相反,该怎么办?

这样的类型有意义吗?我可以用Java或Scala定义它们吗?

特拉维斯·布朗

我不确定这不是您要查找的内容,但是如果您具有自然数的类型级表示(在此答案中,我将使用Shapeless),则可以编写一个有意义的Fibonacci类型类,例如:

import shapeless._, Nat._

trait Factorial[N <: Nat] { type Value <: Nat }

implicit object fact0 extends Factorial[_0] { type Value = _0 }
implicit object fact1 extends Factorial[_1] { type Value = _1 }

implicit def factN[N <: Nat, X <: Nat, Y <: Nat, Z <: Nat](implicit
  nf: Factorial[N]       { type Value = X },
  sf: Factorial[Succ[N]] { type Value = Y },
  sum: ops.nat.Sum.Aux[X, Y, Z]
) = new Factorial[Succ[Succ[N]]] { type Value = Z }

然后,我可以要求类型系统证明例如第七个斐波那契数为十三(因为是):

scala> implicitly[Factorial[_7] { type Value = _13 }]
res1: Factorial[shapeless.Nat._7]{type Value = shapeless.Nat._13} = $anon$1@795adafd

但不是第七斐波那契数是十二:

scala> implicitly[Factorial[_7] { type Value = _12 }]
<console>:23: error: could not find implicit value for parameter e: Factorial[shapeless.Nat._7]{type Value = shapeless.Nat._12}
              implicitly[Factorial[_7] { type Value = _12 }]
                        ^

这种方法使用自然数教堂编码您还可以在Scala 2.10中将单例类型与宏一起使用-例如,有关在Scala中对单例类型的一些讨论,请参见我的博客文章

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以在Object Pascal的类中定义类型吗?

来自分类Dev

我可以在这些摘要中添加自定义链接吗?

来自分类Dev

我可以在Java中创建不同类型的ArrayList吗

来自分类Dev

我可以在Java中更改变量的声明类型吗?

来自分类Dev

我可以在Java中创建不同类型的ArrayList吗

来自分类Dev

在Java中,我可以继承类型参数提供的类吗?

来自分类Dev

def可以在scala中定义变量吗?

来自分类Dev

我可以定义不同类型的数组类型吗?

来自分类Dev

我们可以在scala中优雅地匹配已擦除类型吗?

来自分类Dev

我可以强制地图中的某些键在 Scala 中具有某些类型吗?

来自分类Dev

我可以在golang中的json中将用户定义的值作为数据类型吗

来自分类Dev

我可以在Alexa语音服务中动态创建自定义插槽类型吗?

来自分类Dev

我可以在打字稿中定义/链接类型到类吗?

来自分类Dev

我可以在pascal中定义自己的字符串类型吗?

来自分类Dev

我可以在Alexa语音服务中动态创建自定义插槽类型吗?

来自分类Dev

我可以在 Typescript 中定义事件吗?

来自分类Dev

我可以在代码中为我的自定义帖子类型设置注册的自定义分类吗?

来自分类Dev

我可以在val中使用scala类型参数吗?

来自分类Dev

我可以使类型重定义更优化吗?

来自分类Dev

我可以为字段定义“因子”数据类型吗?

来自分类Dev

我可以使用定义指定类型吗

来自分类Dev

我应该在Java中嵌套这些类吗?

来自分类Dev

我们可以在stackoverflow中上传屏幕截图以更好地解释这些类型的问题吗?

来自分类Dev

可以在Clojure中定义Java接口吗?

来自分类Dev

我们可以在Java程序中编写Scala代码吗?

来自分类Dev

在scala中,有什么方法可以返回类型吗?

来自分类Dev

我可以在Java中列出2种继承的类的类型吗?

来自分类Dev

我可以使用变量的类型在Java中声明另一个变量吗?

来自分类Dev

我可以在Java的Enum中拥有像Swift这样的函数类型吗?

Related 相关文章

  1. 1

    我可以在Object Pascal的类中定义类型吗?

  2. 2

    我可以在这些摘要中添加自定义链接吗?

  3. 3

    我可以在Java中创建不同类型的ArrayList吗

  4. 4

    我可以在Java中更改变量的声明类型吗?

  5. 5

    我可以在Java中创建不同类型的ArrayList吗

  6. 6

    在Java中,我可以继承类型参数提供的类吗?

  7. 7

    def可以在scala中定义变量吗?

  8. 8

    我可以定义不同类型的数组类型吗?

  9. 9

    我们可以在scala中优雅地匹配已擦除类型吗?

  10. 10

    我可以强制地图中的某些键在 Scala 中具有某些类型吗?

  11. 11

    我可以在golang中的json中将用户定义的值作为数据类型吗

  12. 12

    我可以在Alexa语音服务中动态创建自定义插槽类型吗?

  13. 13

    我可以在打字稿中定义/链接类型到类吗?

  14. 14

    我可以在pascal中定义自己的字符串类型吗?

  15. 15

    我可以在Alexa语音服务中动态创建自定义插槽类型吗?

  16. 16

    我可以在 Typescript 中定义事件吗?

  17. 17

    我可以在代码中为我的自定义帖子类型设置注册的自定义分类吗?

  18. 18

    我可以在val中使用scala类型参数吗?

  19. 19

    我可以使类型重定义更优化吗?

  20. 20

    我可以为字段定义“因子”数据类型吗?

  21. 21

    我可以使用定义指定类型吗

  22. 22

    我应该在Java中嵌套这些类吗?

  23. 23

    我们可以在stackoverflow中上传屏幕截图以更好地解释这些类型的问题吗?

  24. 24

    可以在Clojure中定义Java接口吗?

  25. 25

    我们可以在Java程序中编写Scala代码吗?

  26. 26

    在scala中,有什么方法可以返回类型吗?

  27. 27

    我可以在Java中列出2种继承的类的类型吗?

  28. 28

    我可以使用变量的类型在Java中声明另一个变量吗?

  29. 29

    我可以在Java的Enum中拥有像Swift这样的函数类型吗?

热门标签

归档