سؤال

أود أن أكون قادرا على تخزين وظيفة في hashtable. يمكنني إنشاء خريطة مثل:

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

لكنني غير قادر على الاتصال به:

func = hash["one"]
func()

هذا ينتج رسالة الخطأ التالية: لا يمكن استدعاء التعبير على نوع "كائن". وبعد لا هذا ولا ذاك Invoke أو Call يعمل.

كيف يمكنني فعل ذلك ؟ من ما أظن أن الوظيفة المخزنة يجب أن يلقي شيئا.

هل كانت مفيدة؟

المحلول

تحتاج إلى أن يلقي إلى نوع قابل للاستدعاء:

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

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

نصائح أخرى

يمكنك أيضا استخدام قاموس عام لمنع الحاجة إلى الإدلاء بالاستدعاء:

import System.Collections.Generic

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

fn = hash["one"]
fn()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top