本文整理匯總了Golang中github.com/ryanfaerman/fsm.Ruleset.AddRule方法的典型用法代碼示例。如果您正苦於以下問題:Golang Ruleset.AddRule方法的具體用法?Golang Ruleset.AddRule怎麽用?Golang Ruleset.AddRule使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/ryanfaerman/fsm.Ruleset
的用法示例。
在下文中一共展示了Ruleset.AddRule方法的6個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: getLocationRules
func getLocationRules() fsm.Ruleset {
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"town", "forest"})
rules.AddTransition(fsm.T{"forest", "battle"})
rules.AddRule(fsm.T{"town", "forest"}, func(subject fsm.Stater, goal fsm.State) bool {
println("You must have enough energy to go to forest.")
return true
})
return rules
}
示例2: NewWindowRules
func NewWindowRules() fsm.Ruleset {
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"title", "character selection"})
rules.AddTransition(fsm.T{"character selection", "game"})
rules.AddTransition(fsm.T{"character selection", "create character"})
rules.AddRule(fsm.T{"title", "character selection"}, func(subject fsm.Stater, goal fsm.State) bool {
return true
})
return rules
}
示例3: NewBattleRules
func NewBattleRules() fsm.Ruleset {
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"wait", "attack"})
rules.AddTransition(fsm.T{"wait", "run"})
rules.AddTransition(fsm.T{"wait", "use item"})
rules.AddTransition(fsm.T{"wait", "end"})
rules.AddRule(fsm.T{"wait", "attack"}, func(subject fsm.Stater, goal fsm.State) bool {
return true
})
return rules
}
示例4: TestRulesetParallelGuarding
func TestRulesetParallelGuarding(t *testing.T) {
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddTransition(fsm.T{"started", "finished"})
// Add two failing rules, the slow should be caught first
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
time.Sleep(1 * time.Second)
t.Error("Slow rule should have been short-circuited")
return false
})
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
return false
})
st.Expect(t, rules.Permitted(&Thing{State: "started"}, "finished"), false)
}
示例5: BenchmarkRulesetParallelGuarding
func BenchmarkRulesetParallelGuarding(b *testing.B) {
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddTransition(fsm.T{"started", "finished"})
// Add two failing rules, one very slow and the other terribly fast
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
time.Sleep(1 * time.Second)
return false
})
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
return false
})
b.ResetTimer()
for i := 0; i < b.N; i++ {
rules.Permitted(&Thing{State: "started"}, "finished")
}
}
示例6: BenchmarkRulesetRuleForbids
func BenchmarkRulesetRuleForbids(b *testing.B) {
// Here, we explicity create a transition that is forbidden. This simulates an
// otherwise valid transition that would be denied based on a user role or the like.
// It should be slower than a standard invalid transition, since we have to
// actually execute a function to perform the check. The first guard to
// fail (returning false) will short circuit the execution, getting some some speed.
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
return false
})
some_thing := &Thing{State: "started"}
b.ResetTimer()
for i := 0; i < b.N; i++ {
rules.Permitted(some_thing, "finished")
}
}