-
-
Notifications
You must be signed in to change notification settings - Fork 194
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ReGaHSS: .StrValueByIndex() -> fehlerhafte String-Ausgabe bei Indexwert -1 #2597
Comments
@BadenPower Danke für den Report Ich hab mir erlaubt das Beispielskript einmal kurz zu erweitert um den Fall hier etwas deutlicher zu sehen: WriteLine("Start");
WriteLine(dom.BuildLabel());
string lValueList = "A;B";
WriteLine(" 2:'" # lValueList.StrValueByIndex(";",2) # "'");
WriteLine(" 1:'" # lValueList.StrValueByIndex(";",1) # "'");
WriteLine(" 0:'" # lValueList.StrValueByIndex(";",0) # "'");
WriteLine("-1:'" # lValueList.StrValueByIndex(";",-1)# "'");
WriteLine("-2:'" # lValueList.StrValueByIndex(";",-2)# "'");
WriteLine("-3:'" # lValueList.StrValueByIndex(";",-3)# "'");
WriteLine("Ende"); Das ergibt dann folgenden:
In der Tat sieht man das bei |
Es ist schwer vorstellbar, dass es ein Szenario gibt, welches ausgerechnet bei -1 den ganzen String zurückgeben soll. Man stelle sich den Fall vor, dass die Liste nur einen Wert hat, also das Trennzeichen gar nicht im Ausgangsstring vorhanden ist. Dann würde auch beim Index 0 der gesamte String zurückgegeben, was auch vollkommen in Ordnung ist. Eine Unterscheidung dieser 2 Fälle wäre dann wiederum nur durch Auswertung des verwendeten Index möglich. Darum ist mir unschlüssig, weshalb man dann nicht im Vorfeld auf den verwendeten Index reagiert und im Falle von -1 erst gar nicht die Mehtode ausführt, sondern gleich den Ausgangsstring verwendet. Da im Bereich ReGaHSS oftmals eine Differenz von 1 oder -1 zwischen zwei Werten zu Problemen (siehe u.A. .Random()-Bug) führt, könnte ich mir durchaus vorstellen, dass dies eventuell ein eingefügter Workaround zur Vermeidung einer möglichen Exception sein könnte. |
Ich bin für |
Das würde dann bedeuten: |
Ja, wäre für mich ok. |
In meinen Augen macht es keinen Sinn zu unterscheiden, ob sich der Wert im negativen Bereich befindet oder im positiven Bereich >= der Anzahl der enthaltenen Elemente. In beiden Fällen ist es Out-Of-Range und sollte daher gleich behandelt werden. Am "aussagekräftigsten" wäre natürlich ein ScriptRuntimeError. Den Ausgabetyp zu ändern und zum Beispiel "false" zurückzugeben, was natürlich im Gegensatz zu einem Leerstring eindeutig wäre, ist Aufgrund der Möglichkeit der Verkettungen auch nicht geeignet. Alles in allem ist das "Problem" nicht optimal zu lösen. Schauen wir uns aber einmal die Methode .webGetValueFromList() an, welche das gleiche Funktionsprinzip für eine semikolenseparierten Zeichenkette (Liste) ausführt, was der Ausführung der Methode .StrValueByIndex(";",n) entsprechen würde. Dort wird bei einem Index ausserhalb des gültigen Bereiches, egal ob positiv oder negativ, grundsätzlich ein Leerstring zurückgegeben. Wenn ich dies alles zusammen betrachte, sollte man in Erwägung ziehen die Ausgabe von .StrValueByIndex() an die Ausgabe von .webGetValueFromList() anzugleichen und einen Leerstring zurückzugeben. |
Da Regascript kein try except beherrscht zum Fehlerabfangen und sich die Anzahl der Elemente nicht wie im Namensraum web. mit webGetValueListCount ermitteln lässt, neige ich dazu, bei einem Index out of bounds in beiden Fällen einen Leerstring zurückzugeben oder es bei der jetzigen Version zu belassen. Das muss einen Kompromiss ergeben, der den Sprachumfang der Rega berücksichtigt und das Fehlen von Möglichkeiten zum exception handling. Black |
Ok, danke für all euer Feedback. Ich denke dann werde ich das in der Tat so umsetzen das für |
Describe the issue you are experiencing
Wird die Methode .StrValueByIndex() mit dem Parameterwert -1 im 2. Parameter aufgerufen, dann wird der gesamte String zurückgegeben.
Describe the behavior you expected
Erwartet würde die Rückgabe eines Leerstrings, so wie es bei allen anderen Indexangaben ausserhalb des gültigen Wertebereiches zutrifft
Steps to reproduce the issue
Ausführung des folgenden Skriptes unter "Skript testen":
What is the version this bug report is based on?
CCU3 mit ReGaHSS-Version R1.00.0388.0235
Which base platform are you running?
rpi3 (RaspberryPi3)
Which HomeMatic/homematicIP radio module are you using?
n/a
Anything in the logs that might be useful for us?
Additional information
Ausgabe des Skriptes:
The text was updated successfully, but these errors were encountered: