gpt4 book ai didi

ruby - 等同于 Ruby 中的 OCaml 变体

转载 作者:数据小太阳 更新时间:2023-10-29 08:36:37 25 4
gpt4 key购买 nike

有没有办法在 Ruby 中创建类似 OCaml variants 的东西? ?

我正在尝试做这样的事情:

type status =
| sent of DateTime * Location
| paid of DateTime
| new

但我想不出如何以干净、安全和简洁的方式做到这一点。

我有一个带有 status 成员的 Order 类。此字段的可能值为 sentpaidnew。我类的某些成员仅针对 status 的某些状态进行设置和使用。

class Order
field :status # can be :sent, :paid or :new
field :paid_at # DateTime
field :sent_at # DateTime
filed :sent_to # Symbol
end

它运行良好,但就设计而言,我想知道是否有更好的方法来做到这一点。例如,即使状态不是 :sent,也可以访问 sent_to 字段。这种设计的另一个问题是可读性:期望成员名称,没有任何迹象表明 :sent_to 链接到 :sent 状态,而 send_at 链接到 :paid。在这个例子中,可读性还可以,因为只有很少的字段链接到状态并且字段名称很明显,但我不确定更大的类是否仍然如此。

最佳答案

这是可行的,这里有一个很好的例子,由非常优秀的 OCaml 程序员完成,但是是在 Python 中(Python 应该足够接近 ruby​​)

https://github.com/BinaryAnalysisPlatform/bap/blob/master/python/adt.py

关于ruby - 等同于 Ruby 中的 OCaml 变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318500/

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