Funktion aus Dictionary aufrufen

  • Hallo Allerseits,
    ich versuche Funktionen direkt aus einem Dictionary heraus aufzurufen. Zur Demonstration habe ich folgendes kleines Beispielscript geschrieben:

    [autoit]

    $obj = ObjCreate("Scripting.Dictionary")
    $obj("func") = hello

    [/autoit][autoit][/autoit][autoit]

    $obj("func")("world 1")

    [/autoit][autoit][/autoit][autoit]

    ($obj("func"))("world 2")

    [/autoit][autoit][/autoit][autoit]

    $abc = $obj("func")
    $abc("world 3")

    [/autoit][autoit][/autoit][autoit]

    local $array = [hello]
    $array[0]("world 4")

    [/autoit][autoit][/autoit][autoit]

    Func hello($s)
    ConsoleWrite("hello " & $s & @LF)
    EndFunc

    [/autoit]

    Meine simple Frage dazu lautet: Warum scheitert der Interpreter, am ersten der vier Test-Funktionsaufrufe? ^^

    LG
    Christoph :)

    Einmal editiert, zuletzt von BinDannMalWeg (6. Oktober 2014 um 23:31)

    • Offizieller Beitrag

    $obj("func")("world 1")


    Dies ist eine unzulässige Syntax, Dictionary(Key) muss erst ausgewertet werden, bevor der Parameter übergeben werden kann.
    Man sollte sich überlegen, wie sinnvoll diese neuerdings ständig anzutreffenden Syntax Vergewaltigungen sind. Da geht dann leider sehr schnell der Überblick verloren.

  • Zitat

    Man sollte sich überlegen, wie sinnvoll diese neuerdings ständig anzutreffenden Syntax Vergewaltigungen sind.

    Das ist der Trend, umsonst wird das seitens Entwicklern nicht implementiert. Irgendwie muss man ja gewisse "Defizite" kompensieren...und wenn es über völlig vermurkste syntaktische Unzulänglichkeiten geschieht.
    Wenn man solch einen Quatsch zulässt, dann frag ich mich, wieso man nicht direkt ein System einführt, was diese Vorgehensweise "sauber" implementiert. Oder ist das etwa garnicht das Ziel?!

  • Irgendwie muss man ja gewisse "Defizite" kompensieren...und wenn es über völlig vermurkste syntaktische Unzulänglichkeiten geschieht.


    Welche Defizite meinst du konkret?
    Wie können diese mit der Index/Dot-On-Expression-Syntax kompensiert werden?

  • Schau dir dieses Thema genauer an:
    Alternativen zum Array

    Das kenne ich nur all zu gut - trotzdem danke. ;)

    Dies ist eine unzulässige Syntax, Dictionary(Key) muss erst ausgewertet werden, bevor der Parameter übergeben werden kann.

    Und genau das hätte ich eigentlich vom Interpreter erwartet. Das zuerst der entsprechende Wert aus dem Dictionary geladen wird und dann im nächsten Schritt die enthaltene Funktion aufgerufen wird. Beispielsweise bei einem Array funktioniert das nämlich - auch ohne Klammern.
    Aber nun genug der Syntax-Vergewaltigung, ich setze an dieser Stelle mal auf gelöst.

    LG
    Christoph :)