Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 08.10.2009, 09:39 Titel: Funktoren |
|
|
Gibts funktoren auch in FB?
ein:
(pseudocode)
Code: |
type test
a as string
declare operator(Vorname as string) as integer
end type
operator test(Vorname as string) as integer
if a = "" then
a = Vorname
print "Hallo " & Vorname
return 1
else
print "Hallo " & Vorname & ", formally known as " & a
return 2
end if
end operator
dim t1 as test
t1("Mandy")
if t1("Julia") = 1 then
Print "Toll das es dich gibt!"
else
Print "Dich gabs schon mal!"
end if
|
funktioniert leider nicht.. Er kennt anscheinend den oprator() nicht. Oder wird das vielleicht anders implementiert?
Bitte nicht verwechseln! Ich rede nicht vom CAST() operator .. der CAST-Operator hat einige unzulänglichkeiten die ein funktor nicht hat. (z.B. kann man den CAST-Operator nicht mit parametern überladen oder als eigenständige routine aufrufen)
Wär schade wenns das in FB gar nich gäb... |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.10.2009, 11:22 Titel: |
|
|
was du am ehesten suchst ist glaube ich ein konstruktor, den benutzt man so ähhhnlich.. -> referenz _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 08.10.2009, 12:58 Titel: |
|
|
@MisterD: Leider nein, einen konstruktor braucht man nur, wenn man was beim initialisieren eines UDTs machen möchte.
Was ich suche ist, wie man einen UDT als funktion deklariert. .. ein Funktor ist ein Objekt das man auch als funktion gebrauchen kann. Der unterschied zu einer gewöhnlichen funktion ist, das ein funktor auch auf die privaten elemente eines UDTs zugreifen kann. In meinem pseudo-code könnte die variable a auch privat sein. Dann könnte man mit einer "normalen" funktion von aussen nicht auf a zugreifen. Aber der funktor von "testen" könnte das... |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 08.10.2009, 23:57 Titel: |
|
|
Zitat: | Er kennt anscheinend den oprator() nicht. Oder wird das vielleicht anders implementiert? |
OPERATOR gibt es in FreeBASIC sehr wohl, dient aber ausschließlich zur Überladung eines Operators. Also sicher nicht das, was du suchst.
Zitat: | ein Funktor ist ein Objekt das man auch als funktion gebrauchen kann |
Ich bezweifle, dass das in FreeBASIC möglich ist. Genaues kann ich aber nicht sagen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 16.11.2009, 15:27 Titel: |
|
|
Hallo,
ganz so einfach geht das nicht mit den Operatoren, man kann maximal die bereits stehenden Operatoren überladen, in deinem Fall wäre eine
Lösung so in der Art :
Code: |
Type testType
Vname As String
erg As Byte
Declare Operator Let (lhs As String)
End Type
Operator testType.Let (lhs As String)
This.erg = 2
If Len(lhs) > 0 Then
This.Vname = lhs
This.erg = 1
EndIf
End Operator
Dim r As testType
r="paul"
Print r.erg,r.Vname
Sleep
|
Ich weiß nicht wirklich das was du suchst aber vielleicht gibt es ja eine
Anregung was so möglich ist ...
cu chu. [/b][/code] |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 16.11.2009, 20:10 Titel: |
|
|
Natürlich kann man mit FreeBasic in einem UDT eine Funktion deklarieren. Hast Du das schon mal versucht?
Code: |
Type UDT
Declare Function foo( u as Integer, i as String) as Integer
End Type
Funktion UDT.foo ( u as Integer, i as String) as Integer
blablablubb
EndFunction
|
_________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 16.11.2009, 21:58 Titel: |
|
|
@Elektronix,
er wollte aber keine Funktion, sondern einen Operator, welcher gleichzeitig eine Funktion ist.
So in der Art (Pseudocode)
Code: | type udt
someString as string
declare operator = (rhs as string) as byte
end type
operator udt.= (rhs as string) as byte
if len(rhs) = 0 then
udt.someString = "nichts"
return 1
else
udt.someString = rhs
return 2
end if
end operator
dim test as udt
print (test = "vorname") |
Das Programm sollte jetzt eine Ausgabe von 2 machen, verstehst du auf was die Sache hinaus soll ? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 17.11.2009, 18:29 Titel: |
|
|
Property? |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 18.11.2009, 00:37 Titel: |
|
|
Danke das ihr den fred hier weiterführt.. aber irgendwie fühl ich mich nich ganz verstanden wenn ich von funktoren spreche..
Man stelle sich folgendes vor (ebenfalls pseudocode):
Code: |
type mensch
name as string
alter as integer
sprache as string
declare operator()
end type
operator mensch()
print "Hallo, mein Name ist " & Name & " und ich bin " & alter & " Jahre alt."
print "Ich spreche " & sprache & "."
end operator
dim chris as mensch
chris.name = "Chris"
chris.alter = 22
chris.sprache = "deutsch"
chris()
|
In diesem beispiel wäre der datentyp der vom operator mensch() zurückgegeben wird VOID, aber das gibts in basic ja nich...
Würde dieser Pseudo-code funktionieren, würde das programm in etwa folgendes ausgeben:
Hallo mein Name ist Chris und ich bin 22 Jahre alt.
Ich spreche deutsch. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 18.11.2009, 16:00 Titel: |
|
|
Ach sowas. Hm überlade doch einfach den LET-Operator und schreib Chris=0 oder so^^
[/code] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 18.11.2009, 19:12 Titel: |
|
|
@28398: Es geht ja nich ums ergebnis, sondern um die methode. Ein "Objekt" das gleichzeitig als funktion ansprechbar ist, hat sicherlich einige vorteile. So könnte man z.B. ein Objekt als plugin realisieren. Im moment geht das NUR mit statischen routinen. Aber eine statische routine hat den nachteil (selbst wenn sie im UDT definiert ist), dass sie nicht auf Elemente eines UDTs zugreifen kann. |
|
Nach oben |
|
 |
|