I think the most straight forward way in go is just use 2 calls (pseudo)

done:= handleVerbs(g.Verbs)
If !done && includeSysVerbs {
   handleVerbs(sys.Verbs)
}

If it is more involved than that then use an internal delegating to parent 
pattern and declare a struct like ActionMap, that takes a parent ActionMap. 



> On May 3, 2019, at 6:45 AM, Mark Bauermeister <warfan2...@gmail.com> wrote:
> 
> I'm in the process of writing my own Text Adventure/Interactive Fiction 
> engine/library and am now running into a bit of a problem attempting to 
> extend the parser.
> 
> On the implementation side (i e a game), this is how a game is initially set 
> up.
>     game = mid.Game{
>         Title:  "Cloak of Darkness",
>         Author: "Roger Firth (implemented by Mark Bauermeister)",
>         Intro: `Hurrying through the rainswept November night, you're glad to 
> see the
>         bright lights of the Opera House.
>         
>         It's surprising that there aren't more
>         people about but, hey, what do you expect in a cheap demo game...?`,
>         Goodbye:  "See you later!",
>         MaxScore: 2,
>         Verbs: map[string]func(...string){
>             "drop": drop,
>         },
>         Synonyms: map[string][]string{
>             "drop": {"throw"},
>         },
>     }
> 
> Now on the engine/library side, standard verbs are currently hardcoded inside 
> the parser loop.
> Ideally, I'd like to add them to the same "Verbs" map though.
> 
> Is there a straightforward way to include the contents of one map in another?
> 
> Ideally, I'd like to have a "BuiltinVerbs" map and include it as such:
> 
> Verbs: map[string]func(...string){
>             BuiltinVerbs,
>             "drop": drop,
>         },
> 
> The parser currently looks like this and "g.Verbs" should eventually contain 
> both, the game designer's chosen verbs and (if so chosen) the built-in verbs:
> 
> func (g *Game) Parse() {
>     reader := bufio.NewScanner(os.Stdin)
>     for {
>         fmt.Print(">>> ")
>         for reader.Scan() {
>             switch reader.Text() {
>             case "quit":
>                 if len(g.Goodbye) != 0 {
>                     fmt.Println(g.Goodbye)
>                 } else {
>                     fmt.Println("Goodbye!")
>                 }
>                 os.Exit(0)
>             default:
>                 for n, c := range g.Verbs {
>                     s := g._synonymize(reader.Text())
>                     switch s {
>                     case n:
>                         c()
>                     default:
>                         fmt.Println("I beg your pardon?")
>                     }
>                 }
>             }
>             fmt.Print(">>> ")
>         }
>     }
> }
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to