Aktuelle Zeit: 25.09.2020 05:21

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Parameter/Funktion überladen
BeitragVerfasst: 29.08.2020 21:55 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Da es in PB kein "Function overloading" gibt, (also das Aufrufen der selben Prozedur mit unterschiedlichen Parametertypen) habe ich mir hierfür folgende Krücke gebaut. Evtl. kann man das ja noch verbessern?

Code:
Macro MyFunc(param1, param2)
   _MyFunc(#DQUOTE$ + param1 + #DQUOTE$, #DQUOTE$ + param2 + #DQUOTE$)
EndMacro

Macro IsNumber(value)
   Bool(Trim(value, #DQUOTE$) = Str(Val(Trim(value, #DQUOTE$))))
EndMacro

Macro ToNumber(value)
   Val(Trim(value, #DQUOTE$))
EndMacro
 
Macro ToString(value)
   Trim(value, #DQUOTE$)
EndMacro

Procedure _MyFunc(Param1.s, Param2.s)
   If IsNumber(Param1)
      Debug "Number: " + ToNumber(Param1)
   Else
      Debug "String: " + ToString(Param1)
   EndIf
   
   If IsNumber(Param2)
      Debug "Number: " + ToNumber(Param2)
   Else
      Debug "String: " + ToString(Param2)
   EndIf
EndProcedure

MyFunc("title", "My window title")
MyFunc("width", 350)
MyFunc("height", 600)
MyFunc(33, 600)

Markus

_________________
"Never run a changing system!"
PB 5.72 x64, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 52.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Parameter/Funktion überladen
BeitragVerfasst: 31.08.2020 10:10 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Nett, nur leider nicht sehr performant. Und es wird ja auch nicht wirklich der Datentyp erkannt sondern nur die Daten, und das Trim() ist zu gierig 8)
Code:
MyFunc("33", 600)                                  ; "33" identified as number
MyFunc(~"quote: \"this is a quoted text\"", 600)   ; end dqoute trimmed

Es gibt ja auch TypeOf(), aber leider nicht für Literale, und ein mehrzeiliges Macro würde auch Rückgabewerte schwierig machen.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Parameter/Funktion überladen
BeitragVerfasst: 31.08.2020 10:24 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Für Windows den Parameter Type Variant, oder ein eigenen strukturieren Datentype anlegen.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Parameter/Funktion überladen
BeitragVerfasst: 31.08.2020 17:27 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
@#Null, ja wie gesagt ist das nur eine Krücke. Was anderes ist mir bisher nicht eingefallen und für meinen Zweck war die Unterscheidung zw. numerische Ganzahl und String ausreichend.

@mk-soft: Ich brauchte das für ein SpiderBasic Projekt, da gibt es leider keine Pseudotypes.
Wie meinst du das mit dem strukturierten Datentypen? Meinst du, dass man vor dem Prozeduraufruf noch eine strukturierte Variable anlegt und entsprechend füllt? Das habe ich verworfen, weil mir das zu weit weg ist von einem einfachen Prozeduraufruf.

_________________
"Never run a changing system!"
PB 5.72 x64, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 52.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye