types - OCAML 如何找到变体的下一个元素

标签 types ocaml variant

我有 -> 输入 week = MON |周二 | WED......我想创建明天返回的函数!例如,如果我调用“tomorrow MON”,该函数将返回 TUE。

最佳答案

没有允许您执行此操作的内置语言结构。所以你应该自己编写函数:

let tomorrow = function
  | MON -> TUE
  | TUE -> WED
  ...

另一种可能性是实现这些功能:
val int_of_week: week -> int
val week_of_int: int -> week

碰巧用 Obj.magic 编写这些函数是微不足道的。他们将允许您明天实现:
let tomorrow w =
  week_of_int ((int_of_week w + 1) mod 7)

这可能更接近你的想法。

但是这个解决方案不太安全:
  • 函数明天假设 int_of_week MON = 0,int_of_week TUE = 1 等等;
  • 对于不在 0 和 6 之间的整数,您需要记录 week_of_int 的行为;
  • 最后但并非最不重要的是,Obj.magic 实际上并不是语言的一部分。
  • 关于types - OCAML 如何找到变体的下一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15835659/

    相关文章:

    delphi - 在 Delphi 中,跨单元使用类型定义时出现问题

    compiler-errors - OCaml 用高阶函数标记参数顺序

    Scala 递归类型别名错误

    PHP 和 Jquery 的 json

    ocaml - 使用 dynlink 加载模块重新初始化顶层值

    ocaml - 使用 ocaml utop 打印历史列表

    haskell - 如何将可选属性附加到值?

    delphi - 如何使用 RTTI 分配 OleVariant?//将 OleVariant 或 Variant 转换为具有特定 TTypeKind 或 TRTTIType 的 TValue?

    c++ - 有没有办法从已知的替代方案中重置 std::variant ?

    javascript - 为什么以及如何 ([![]]+[][[]])[+!+[]+[+[]]] 评估为字母 "i"?