Como posso criar uma tabela de despacho em Boo?
-
18-09-2019 - |
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.
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