Pergunta

Eu gostaria de poder armazenar uma função em uma hashtable. Eu posso criar um mapa como:

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

Mas não sou capaz de chamá -lo:

func = hash["one"]
func()

Isso produz a seguinte mensagem de erro: Não é possível invocar uma expressão no tipo 'objeto'. Nenhum Invoke ou Call funciona.

Como eu posso fazer isso ? Pelo que estou supondo, a função armazenada deve ser lançada para alguma coisa.

Foi útil?

Solução

Você precisa lançar para um Tipo chamável:

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

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

Outras dicas

Você também pode usar um dicionário genérico para evitar a necessidade de ser lançado para um chamável:

import System.Collections.Generic

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

fn = hash["one"]
fn()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top