views:

104

answers:

2

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  A: 

You need to cast to a Callable type:

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

func = hash["one"] as callable
func()
Darin Dimitrov
Thanks! That worked.
Geo
+3  A: 

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()
matt