2012-03-22 4 views
0

github에서 State Machine Ruby README.md를 읽었습니다.루비 상태 머신 - 심볼에서 빼기?

SM을 내 Rails 응용 프로그램과 통합하려고합니다. 내가 궁금합니다 그러나

그 라인은 무엇 :

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

Particulary을이 단편은 나에게 '마법'과 같습니다

any - :parked, 

김, 당신은 (개체의 어떤 종류에서 기호를 빼기 s) any 도우미가 반환합니다. 어떻게 작동하고 정확히이 전체 라인 (before_transition ...)을 수행합니까?

답변

1

any은의 싱글 인스턴스 AllMathcher, 어떤 모델의 모델을 나타냅니다. 빼기 ("-") 연산자는 실제로 AllMatcher (reference here)의 인스턴스 메서드로, 주어진 상태를 모델 상태에서 제외합니다. 모델이의 상태가있는 경우

따라서, :running, :stopped:parkedany - :parked 단지 (:parked을 제외) 상태를 :running:stopped를 반환합니다.

그리고 전체 문 before_transition :parked => any - :parked, :do => :put_on_seatbelt의 의미는 다음과 같습니다 모델이 어떤 상태지만 :parked:parked에서 를 천이하기 전에, 동작 :put_on_seatbelt을한다.

0

statemachine 코드를 보지 못했습니다. github에서 쉽게 찾을 수 있습니다 (링크가 도움이 될 수도 있음). 그러나 나는 any이 기호를 포함하는 집합 같은 객체를 반환한다고 생각할 것입니다.이 객체는 요소 제거로 정의 된 -을가집니다.

는 점을 감안하고, " :parked 이외의 상태로 :parked 상태에서 이동하기 전에, 당신이 :put_on_seatbelt을해야한다"와 같은 상식적인 독서를 적용, 내가 선을 해석하는 것