Seite 1 von 1
Mischen von Strings und numerischen Werten
Verfasst: 10.07.2015 21:21
von rolle
Hallo,
ich hatte einen Vertipper im meinen Code und trotzdem lies er sich kompilieren (5.24 LTS x86) und korrekt ausführen. Warum auch immer?
Ich habe das mal aufs nötigste reduziert:
Code: Alles auswählen
string.s = "string" + 1 ; eigentlich richtig str(1)
debug string
Ausgabe: string1
Tausche ich die Werte, gibts eine Fehlermeldung, die aber inhaltlich auch auf die obige Version paßt.
Compilerfehler: cant mix strings with numerical values.
Ist das ein Bug oder ein Feature? Wobei ich letzteres nicht programmierethisch nachvollziehen kann.
Vielen Dank
rolle
Re: Mischen von Strings und numerischen Werten
Verfasst: 10.07.2015 21:36
von ts-soft
Geschichte PB 5.10 hat geschrieben:- Hinzugefügt: Auto-Casting von numerischen Werten, wenn Strings beteiligt sind - erlaubt das Verketten von Strings und numerischen Konstanten
Feature

Re: Mischen von Strings und numerischen Werten
Verfasst: 10.07.2015 22:21
von Sven
Code: Alles auswählen
#eins = 1
#zwei = 2
string.s = "text" + #eins + #zwei ;Witzig!
Debug string
Debug #eins + #zwei
Scheint tatsächlich gewollt zu sein.
Ich weiß zwar noch nicht, wo ich das gebrauchen könnte, aber vielleicht fällt mir noch was ein...
Re: Mischen von Strings und numerischen Werten
Verfasst: 10.07.2015 22:51
von Nino
ts-soft hat geschrieben:Geschichte PB 5.10 hat geschrieben:- Hinzugefügt: Auto-Casting von numerischen Werten, wenn Strings beteiligt sind - erlaubt das Verketten von Strings und numerischen Konstanten
Feature

Ja, und um die Frage komplett zu beantworten:
Das funktioniert so nur (gewollt, kein Bug), wenn die "Kette" mit einem String beginnt.
Re: Mischen von Strings und numerischen Werten
Verfasst: 10.07.2015 23:18
von rolle
Vielen Dank, nun weiß ich bescheid.
Ich werde mir das aber gar nicht erst angewöhnen. Das gibt bestimmt nur Ärger in anderen Sprachen.
rolle
ps: Das ist wirklich ein super umfangreiches Forum mit fähigen Leuten!

Re: Mischen von Strings und numerischen Werten
Verfasst: 10.07.2015 23:45
von Derren
Sven hat geschrieben:Ich weiß zwar noch nicht, wo ich das gebrauchen könnte, aber vielleicht fällt mir noch was ein...
Code: Alles auswählen
a = 79
Debug "a = " + a ;schön, einfach, übersichtlich wie man es von vielen anderne Sprachen gewohnt ist
;Debug "a = " + Str(a) ; Str nun obsolet
error = 6858
MessageRequester("Fehler", "Es ist ein Fehler aufgetreten."+#CRLF$+"ErrorCode: "+ error)
;usw...
Re: Mischen von Strings und numerischen Werten
Verfasst: 11.07.2015 00:15
von Sven
Derren hat geschrieben:Code: Alles auswählen
a = 79
Debug "a = " + a ;schön, einfach, übersichtlich wie man es von vielen anderne Sprachen gewohnt ist
...
Überzeugt mich jetzt nicht so. Ich weiß doch, welche Konstante ich zuweise.
Aber jetzt wird es interessant:
Code: Alles auswählen
If ElapsedMilliseconds() < 1000
error = 6858
Else
error = ElapsedMilliseconds()
EndIf
MessageRequester("Fehler", "Es ist ein Fehler aufgetreten." + #CRLF$ + "ErrorCode: " + error)
Debug "Time " + ElapsedMilliseconds()
Es funktioniert auch mit
Variablen. Und zwar nicht nur mit "konstanten Variablen", sondern mit beim Compilieren noch unbekannten Variablen.
Denn wielange ich brauche um den Requester zu bestätigen kann der Compiler kaum vorhersagen.
Re: Mischen von Strings und numerischen Werten
Verfasst: 11.07.2015 00:42
von Derren
Sven hat geschrieben:Derren hat geschrieben:Code: Alles auswählen
a = 79
Debug "a = " + a ;schön, einfach, übersichtlich wie man es von vielen anderne Sprachen gewohnt ist
...
Überzeugt mich jetzt nicht so. Ich weiß doch, welche Konstante ich zuweise.
Es funktioniert auch mit
Variablen. Und zwar nicht nur mit "konstanten Variablen", sondern mit beim Compilieren noch unbekannten Variablen.
Denn wielange ich brauche um den Requester zu bestätigen kann der Compiler kaum vorhersagen.
Hä?
Beim Kompilieren sind alle Variablen "unbekannt". Das da oben ist auch ne Variable. Also gut entdeckt
Und dein Code ging vorher auch. Mit Str(), eben. Das brauchst du jetzt nicht. Das ist der einzige Vorteil. Aber ich dachte das überzeugt dich nicht?
Ja, es funktioniert sogar mit Floats.
Vielleicht
überzeugt es dich jetzt
Oh, Sorry. Du
weißt ja, welche Variablen du zuweist. Fehler bei der Debuggerausgabe sind also ausgeschlossen, da du jederzeit den Überblick hast ob du Str(), StrF() oder StrD() verwenden musst

Re: Mischen von Strings und numerischen Werten
Verfasst: 11.07.2015 02:25
von Sven
Derren hat geschrieben:
Beim Kompilieren sind alle Variablen "unbekannt". Das da oben ist auch ne Variable. Also gut entdeckt

Ein einigermaßen intelligenter Compiler kann durchaus erkennen, daß a hier nie verändert wird, und die 79 gleich als Konstante hinter den String setzen. Damit wäre keine Variable beteiligt.
Deswegen mein Test mit den garantiert nicht konstanten Werten aus den Millisec. Denn auch sowas:
a = 5
b = 7
c = a * b
Debug "c = " + c
könnte der Compiler direkt als
Debug "c = 35" compilieren.
Re: Mischen von Strings und numerischen Werten
Verfasst: 11.07.2015 10:07
von Derren
Fair enough
