Seite 1 von 1

Prozedur mit 2 optionalen Parametern. Platzhalter bei Aufruf

Verfasst: 27.02.2011 19:21
von SebastianJu2
Wenn man eine Prozedur aufruft die 2 optionale Parameter hat, man aber nur den 2. füllen will gibt es dann einen Platzhalter für den 1. Parameter? Denn einfach leer lassen bzw Komma und Komma gibt einen Syntax-Fehler. Es wird, wenn der optionale 1. Parameter ein String ist auch ein String erwartet aber ein Leerstring würde den Standardwert der optionalen Variable überschreiben. Man muss also immer den Standardwert mit übergeben. Oder gibt es eine andere Möglichkeit?

Zweite Frage ist wie man in einem String escapen kann. ZB ein doppeltes Anführungszeichen innerhalb eines Strings unterbringen. Ich habe es bisher mit chr(34) gemacht aber gibt es ein Escaping?

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 19:34
von ts-soft
Escape-Sequenzen

Für den ersten optionalen Parameter einen Wert nehmen, der niemals Vorkommen sollte, so
kannst Du darauf reagieren.

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 19:35
von BI2
SebastianJu2 hat geschrieben:Wenn man eine Prozedur aufruft die 2 optionale Parameter hat, man aber nur den 2. füllen will gibt es dann einen Platzhalter für den 1. Parameter?
Nein, gibt es in der Form nicht, Du musst dem Parameter in diesem Fall einen Wert zuweisen (das kann auch der vordefinierte Wert sein).
SebastianJu2 hat geschrieben:Zweite Frage ist wie man in einem String escapen kann. ZB ein doppeltes Anführungszeichen innerhalb eines Strings unterbringen. Ich habe es bisher mit chr(34) gemacht aber gibt es ein Escaping?
Anstelle von Chr(34) kannst Du noch #DQUOTE$ verwenden, kommt aber auf das Selbe hinaus.

Gruß, BI2

Edit: zu langsam :wink:

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 19:43
von SebastianJu2
Ok... danke... ich schätze das Escapen haben die Entwickler gar nicht erst eingebaut weil es langsamer ist da der String erst überprüft werden muss. In php gibt es wohl einen merkbaren Unterschied zwischen Strings in einfachen Anführungszeichen, in denen keine Sonderzeichen interpretiert werden, und doppelten Anführungszeichen, zwischen denen auch Variablen ersetzt werden.
Ich denke dann lass ich das so.

@ts

Meine Funktion hat diesen Kopf:

Code: Alles auswählen

Procedure ChkCreated(*Handle.i, Type$, Action$ = "create", Addition$ = "")
Den Parameter Addition$ wollte ich mit einer extra Fehlermeldung füllen aber Action$ mit Create hätte gestimmt. Und Action$ wird dann direkt in die Fehlermeldung eingebaut. In dem Fall müsste ich dann wohl den Standardwert mit übergeben.
Meiner Meinung nach würde es in PB auch Sinn machen wenn man in so einem Fall gar nichts zwischen die Kommas schreiben muss beim Aufruf. Vielleicht wirds ja noch implementiert.

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 19:57
von ts-soft
Escape-Sequenzen können zwar nützlich sein, aber meistens nerven sie nur, deshalb sind die auch
nicht eingebaut. Ich kenne andere Sprachen, da muss ich jeden Pfad mit 2 Backslashes angeben,
das ist sowas von :freak:

Code: Alles auswählen

Procedure ChkCreated(*Handle, Type$, Action$ = "create", Addition$ = "") 
  If Not Action$ : Action$ = "create" : EndIf
EndProcedure
Ein Pointer hat keinen nativen Type, also niemals *Handle.i, sondern immer ohne .i, .w usw.
Ausnahme sind Strukturen, *Handle.integer damit man dann so: *Handle\i drauf zugreifen kann.
Aber trotz allem, Pointer haben keinen nativen Typ. Der Typ ist Pointer!

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 20:15
von SebastianJu2
Alles klar... werde den Integer von den Pointern entfernen...

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 23:08
von Mok
ts-soft hat geschrieben:Ein Pointer hat keinen nativen Type, also niemals *Handle.i, sondern immer ohne .i, .w usw.
Ich meine, hier irgendwo gelesen zu haben, dass die Pointer immer Integer als Typ haben (mal abgesehen vom Deftype, der standardmässig Integer ist)

EDIT:
Ach ja, hier wars: http://www.purebasic.fr/german/viewtopi ... 04#p282104
Hast sogar du geschrieben

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 23:20
von ts-soft
Pointer sind Pointer! Integer sind immer so gross, das er einen Pointer aufnehmen kann!

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 23:22
von Mok
ts-soft hat geschrieben:Pointer sind Pointer! Integer sind immer so gross, das er einen Pointer aufnehmen kann!
Ok, und wie siehts aus, wenn ich eine C-DLL Wrappen/Prototypen will?
Werde ich für Prototype.s pRtlIpv6StringToAddress (*Addr.in6_addr, *S.s) (MSDN) gesteinigt, oder ist das erlaubt? (von Compilersiete ist's natürlich erlaubt!)

Re: Prozedur mit 2 optionalen Parametern. Platzhalter bei Au

Verfasst: 27.02.2011 23:26
von ts-soft
Das erste ist eine strukture, also okay, aber das *S.s ist schwachfug, zumindest in PB.