How can I create a dispatch table in Boo?

192 Views Asked by At

I'd like to be able to store a function in a hashtable. I can create a map like:

hash = {}
hash["one"] = def():
   print "one got called"

But I'm not able to call it:

func = hash["one"]
func()

This produces the following error message: It is not possible to invoke an expression on type 'object'. Neither Invoke or Call works.

How can I do it ? From what I'm guessing, the stored function should be cast to something.

2

There are 2 best solutions below

0
On BEST ANSWER

You need to cast to a Callable type:

hash = {}
hash["one"] = def ():
   print "one got called"

func = hash["one"] as callable
func()
0
On

You could also use a generic Dictionary to prevent the need to cast to a callable:

import System.Collections.Generic

hash = Dictionary[of string, callable]()
hash["one"] = def():
    print "got one"

fn = hash["one"]
fn()