_ArrayDisplay(StringRegExp("test","(te)(st)",1)) = _ArrayDisplay() called with expression on Const ByRef-param(s).

  • Hallo, ich arbeite gerade das Tutoria zu regulären Ausdrücken durch und versuche gerade das Array, welches StringRegExp zurückgeben soll auszugeben, leider erfolglos:

    [autoit]

    _ArrayDisplay(StringRegExp("test","(te)(st)",1))

    [/autoit]


    sagt mir immer:

    Code
    _ArrayDisplay() called with expression on Const ByRef-param(s).


    Aber warum? So wie ich das sehe passiert folgendes:
    StringRegExp findet im String "test" die Übereinstimmung mit Suchmuster "(te)(st)" und teilt dies gem. den zwei mitgegebenen Klammern in 2 Gruppen. durch den Parameter 1 der Funktion wird sie veranlasst ein Array mit den gefunden Ergebnissen zurückzugeben, was sie nicht korrekt tut?


    Vielen dank für die Antwort im voraus.

  • Interessant, ich stellte mir bisher vor, das eine Funktion nichtmal weiß das der Wert den sie bekommt von eineR Funktion oder von eine rVariablen stammt:

    Also ersetzt der Interpreter die Variable nicht vor Funktionsaufruf mit dem enthaltenen Wert? Bzw. Gibt eine Funktion ein andersgeartetes Array zurück? Das einzige was ich an der fehlermledng verstehe ist das Const. Also die Funktion gibt einen konstanten Wert zurück, während die Variable einen variablen Wert zurückgibt? ByRef heisst ja soweit ich weiß das die Funktion was mit dem übergebenen Wert machen können wollte? Also ist die Rückgabe der Funktion äquivalent mit einer "const" gekennnzeichneten Variable?

  • _ArrayDisplay ist ja folgendermaßen aufgebaut:

    Func _ArrayDisplay(Const ByRef $avArray, ....

    ByRef, damit mit dem übergebenen Array direkt gearbeitet wird und nicht mit einer Kopie - geht schneller und spart Speicher

    Const, in dem Fall wird das Array ja nicht mehr verändert, also kann (und wird) vermutlich der Interpreter bzw. Kompiler "$avArray" bzw. dessen Adresse (oder den Wert bei normalen Variablen) an den darauf folgenden Verwendungs-Stellen ersetzen.

    Der Wert des Arrays ändert sich bei dieser Funktion nicht.
    Würde es geändert und ByRef übergeben, wird das Ursprungs-Array verändert.