我在github上重写了State Machine Ruby README.md。
我想将SM与我的Rails应用程序集成。
但是我对这条线的作用感到好奇:
before_transition :parked => any - :parked, :do => :put_on_seatbelt
特别是这个片段对我来说看起来像'魔术':
any - :parked,
Soo,你从any
助手返回的某种对象中减去符号。
它是如何工作的以及它对整行(before_transition ...
)究竟是做什么的?
答案 0 :(得分:1)
any
是AllMathcher
的单例实例,代表模型的任何状态。减号(“ - ”)运算符实际上是AllMatcher
(reference 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
“