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

use*_*250 4 ocaml types variant

我有 - >类型周= MON | TUE | WED ......我想创建明天第二天返回的功能!例如,如果我调用"明天MON",该函数将返回TUE.

小智 5

没有内置的语言结构允许您这样做.所以你应该自己编写这个函数:

let tomorrow = function
  | MON -> TUE
  | TUE -> WED
  ...
Run Code Online (Sandbox Code Playgroud)

另一种可能性是实现这些功能:

val int_of_week: week -> int
val week_of_int: int -> week
Run Code Online (Sandbox Code Playgroud)

碰巧用Obj.magic写这些函数是微不足道的.他们会允许你明天实施:

let tomorrow w =
  week_of_int ((int_of_week w + 1) mod 7)
Run Code Online (Sandbox Code Playgroud)

这可能更接近你的想法.

但这种解决方案不太安全:

  • 函数明天假定int_of_week MON = 0,int_of_week TUE = 1等等;
  • 你需要记录为不在0到6之间的整数的week_of_int的行为;
  • 最后但并非最不重要的是,Obj.magic实际上并不是该语言的一部分.