Ruby状态机 - 从符号中减去?

时间:2012-03-22 11:39:34

标签: ruby-on-rails state-machine

我在github上重写了State Machine Ruby README.md。

我想将SM与我的Rails应用程序集成。

但是我对这条线的作用感到好奇:

before_transition :parked => any - :parked, :do => :put_on_seatbelt

特别是这个片段对我来说看起来像'魔术':

any - :parked,

Soo,你从any助手返回的某种对象中减去符号。 它是如何工作的以及它对整行(before_transition ...)究竟是做什么的?

2 个答案:

答案 0 :(得分:1)

anyAllMathcher的单例实例,代表模型的任何状态。减号(“ - ”)运算符实际上是AllMatcherreference here)的实例方法,它从模型的状态中排除给定状态。

因此,如果您的模型的状态为:running:stopped:parked,那么any - :parked只会返回状态:running:stopped:parked除外)。

整个陈述before_transition :parked => any - :parked, :do => :put_on_seatbelt的含义是:在模型从 :parked 转换为之前的任何状态<{1>}之前,执行操作:parked

答案 1 :(得分:0)

我还没有看到状态机代码(也不能在github上轻松找到它 - 链接可能有帮助);但是我想any会返回一个包含符号的类似于对象的对象,其中-被定义为元素删除。

考虑到这一点,并应用常识性阅读,我会将该行解释为“在从:parked状态转移到:parked以外的任何州之前,您应该:put_on_seatbelt