AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Generics Fehler in TQueue? [edit: nein, Doku fehlerhaft]
Thema durchsuchen
Ansicht
Themen-Optionen

Generics Fehler in TQueue? [edit: nein, Doku fehlerhaft]

Ein Thema von Bummi · begonnen am 27. Feb 2012 · letzter Beitrag vom 27. Feb 2012
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

Generics Fehler in TQueue? [edit: nein, Doku fehlerhaft]

  Alt 27. Feb 2012, 12:07
bekommt jemand bei folgenden Beispiel:
http://docwiki.embarcadero.com/CodeE...Queue_(Delphi))
das richtige Ergebnis?

oder habe ich ein Problem diese Ausgabe richtig zu interpretieren:
Code:
Element added: John
Element added: Mary
Element added: Bob
Element added: Anna
Element added: Erica
First enqueued element is: "John".
Element extracted: John
The queue contains 4 elements.
Element removed: Mary
First enqueued element is: "Mary".
Element removed: Bob
Element removed: Anna
Element removed: Erica
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (27. Feb 2012 um 13:24 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Generics Fehler in TQueue?

  Alt 27. Feb 2012, 12:13
Der Output sieht für mich korrekt aus, nur der Docwiki-Link funktioniert nicht (die rechte Klammer fehlt).
Erklärung: einmal wird Peek und einmal wird Dequeue aufgerufen um das erste Element anzuzeigen, die Lognachricht ist in beiden Fällen "First enqueued element is:", aber der Effekt auf die Queue ist unterschiedlich (Peek entfernt nichts).
Michael Justin

Geändert von mjustin (27. Feb 2012 um 12:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Generics Fehler in TQueue?

  Alt 27. Feb 2012, 12:36
ich hatte die Breakpoints falsch gesetzt, sorry, in Zusammenhang mit den Fehlerhaften Quellcodekomnentaren bin ich ins eigene Messer gelaufen.
Delphi-Quellcode:
  { Show the last enqueued element without modifying the Queue. }
  MessageDlg('First enqueued element is: "' + Queue.Peek() + '".', mtInformation, [mbOK], 0);
 
  { Extract the top element: "Erica". }
  Queue.Extract();
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Generics Fehler in TQueue?

  Alt 27. Feb 2012, 12:38
Wenn man sich die Meldungen durchliest, dann scheint mit "Mary" irgendwas nicht zu stimmen.
Code:
TQueue<String>.Create    -                                    -
Queue.Enqueue('John')    Element added: John                  John
Queue.Enqueue('Mary')    Element added: Mary                  John Mary
Queue.Enqueue('Bob')     Element added: Bob                   John Mary Bob
Queue.Enqueue('Anna')    Element added: Anna                  John Mary Bob Anna
Queue.Enqueue('Erica')   Element added: Erica                 John Mary Bob Anna Erica
Queue.Peek               First enqueued element is: "John".   [John] Mary Bob Anna Erica
Queue.Extract            Element extracted: John              Mary Bob Anna Erica
Queue.TrimExcess         -                                    -
Queue.Count              The queue contains 4 elements.       [Mary Bob Anna Erica]
Queue.Dequeue            Element removed: Mary                Bob Anna Erica
{Queue.Dequeue}          First enqueued element is: "Mary".   [Bob] Anna Erica
Queue.Clear              Element removed: Bob                 Anna Erica
{Queue.Clear}            Element removed: Anna                Erica
{Queue.Clear}            Element removed: Erica               -
Aber es sind einfach nur "schlechte" Meldungstexte, bzw. sie werden in einer falschen ungünstigen Reihenfolge ausgegeben.
Einfach mal diese beiden Meldungen austauschen und schon sieht es besser aus.
Code:
Queue.Dequeue            Element removed: Mary                Bob Anna Erica
{Queue.Dequeue}          First enqueued element is: "Mary".   [Bob] Anna Erica
[add]
@mjustin: Mary wird entfernt und danach ist es dennoch drin (first).
Das sieht also OK aus?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Feb 2012 um 12:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Generics Fehler in TQueue?

  Alt 27. Feb 2012, 12:43
Schau dir doch den Beispiel Code an, ist doch logisch, dass zuerst das removed Event getriggert wird (durch den Dequeue aufruf) und das Ergebnis dieses Aufrufs ausgegeben wird.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: Generics Fehler in TQueue?

  Alt 27. Feb 2012, 12:52
Zitat:
Delphi-Quellcode:
  { Show the last enqueued element without modifying the Queue. }
  MessageDlg('First enqueued element is: "' + Queue.Peek() + '".', mtInformation, [mbOK], 0);
 
  ...
 
  { Show the last enqueued element by modifying the Queue. }
  MessageDlg('First enqueued element is: "' + Queue.Dequeue() + '".', mtInformation, [mbOK], 0);
Oder eine kleine Änderung und schon paßt es:
Delphi-Quellcode:
  { Show the last enqueued element without modifying the Queue. }
  MessageDlg('First element is: "' + Queue.Peek() + '".', mtInformation, [mbOK], 0);
 
  ...
 
  { Show the last enqueued element by modifying the Queue. }
  MessageDlg('Enqueued element is: "' + Queue.Dequeue() + '".', mtInformation, [mbOK], 0);
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Generics Fehler in TQueue?

  Alt 27. Feb 2012, 13:03
Fazit: Kein Fehler in TQueue - nur Meldungen und Kommentare im Beispiel Code sind etwas unglücklich gewählt (und nebenbei ein Paradebeispiel, dass solche sehr zur Verwirrung des Lesers führen können)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Generics Fehler in TQueue?

  Alt 27. Feb 2012, 13:03
[QUOTE=himitsu;1153106]
Zitat:

Oder eine kleine Änderung und schon paßt es:
Delphi-Quellcode:
 
  ...
   { Show the last enqueued element by modifying the Queue. }
  MessageDlg('Enqueued element is: "' + Queue.Dequeue() + '".', mtInformation, [mbOK], 0);
"Enqueues element is" ... Queue.Dequeue ?

Enqueued ist das zuletzt hinzugefügte Element (Ende der Warteschlange).
Dequeue entfernt am Anfang.

Mein Vorschlag wäre:

  MessageDlg('Dequeued element is: "' + Queue.Dequeue() + '".', mtInformation, [mbOK], 0);
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz