Seite 1 von 1

Prozedur - Return mit verschiedenen Typen String/Int

Verfasst: 22.12.2014 16:58
von joebusch
Mojen,
ich versuche eine Funktion zu schreiben , bei der entweder eine Zahl oder ein String zurückkommt.
Die Hilfe ist da ein bischen dürftig , deswegen stehe ich hier einigermassen auf dem Schlauch.
Unter AutoIt hatte ich damit ja (leider ?) nichts zu tun.
Müsste ich die Zahl in einen String umwandeln ? Um sie dann aber wieder woanders einzuspeisen, muss
sie wieder zurück konvertiert werden ?

Dazu noch eine kleine extra Frage, kann Select wirklich nur mit Zahlen hantieren ? Is das nicht ein wenig dürftig ?
Für Stringvergleiche/Selektionen müsste ich mich dann in If Orgien ergehen ?
Ich harre der Beiträge ... :roll:

Code: Alles auswählen

Procedure ListGetAktiveItem(RcType.s = "Txt")
    Debug "Liste"
    ItemId = GetGadgetState(EventGadget())
    ItemTxt.s = GetGadgetItemText(EventGadget(),ItemId,0)    
    Debug "ListDoubleKlick " +  Itemtxt
    If RcType = "Txt" 
      ProcedureReturn ItemTxt
    EndIf
    If RcType = "Id"
        ProcedureReturn  Item
    EndIf 
      
  EndProcedure  

Re: Prozedur - Return mit verschiedenen Typen String/Int

Verfasst: 22.12.2014 17:13
von NicTheQuick
Eine Procedure kann nur jeweils einen Datentyp zurückgeben. Also entweder einen String oder einen Zahlentyp.
'Select' kommt auch mit Strings zurecht:

Code: Alles auswählen

s.s = "hallo"
Select s
	Case "hallo" 
		Debug "Hallo auch"
	Case "tschüss"
		Debug "Bis dann"
	Default
		Debug "Ich weiß nicht, was du mir sagen willst."
EndSelect

Re: Prozedur - Return mit verschiedenen Typen String/Int

Verfasst: 22.12.2014 17:13
von STARGÅTE
Eine Prozedur wird kompiliert und somit ist es nicht möglich verschiedene Return-Typen zu vergeben, da ja ganz andere Register der CPU genutzt werden.
Somit zwei verschiedene Proceduren schreiben.

Du kannst ja eh nicht zur Leufzeit zwischen beiden Rückgabetypen wechseln, da ja der umgebene Code auch am Syntax für Nummern oder eben String gebunden ist.

Select kann auch mit Strings arbeiten:

Code: Alles auswählen

Select String
  Case "Alpha"
  Case "Beta"
EndSelect

Re: Prozedur - Return mit verschiedenen Typen String/Int

Verfasst: 22.12.2014 23:44
von joebusch
Danke, es wörkt :allright:

Re: Prozedur - Return mit verschiedenen Typen String/Int

Verfasst: 23.12.2014 02:29
von Bisonte
Es würde evt. auch so gehen :

Code: Alles auswählen

Structure s_activeItem
  Gadget.i
  ItemID.i
  ItemText.s
EndStructure

Procedure ListGetActiveItem(*var.s_activeItem)
  
  If *var
    *var\Gadget = EventGadget()
    *var\ItemID = GetGadgetState(*var\Gadget)
    *var\ItemText = GetGadgetItemText(*var\Gadget, *var\ItemID, 0)
    ProcedureReturn #True  
  EndIf
  
  ProcedureReturn #False
  
EndProcedure

Define AktivesGadget.s_activeItem

;: Aufruf

If ListGetActiveItem(@AktivesGadget) ; <- Hier wird der Speicher der Variablen übergeben. Beachte @ am Anfang des VariablenNamen
  Debug "Text : " + AktivesGadget\ItemText
  Debug "ID   : " + Str(AktivesGadget\ItemID)
  Debug "Es war Gadget : " + Str(AktivesGadget\Gadget)
EndIf
Der Prozedur muss dann halt nur die Speicheradresse der Variablen übergeben werden.