Ergebnis 1 bis 13 von 13

Thema: Problem beim Umgang mit Array

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Arrays werden nicht mit dem Call-By-Value sondern mit dem Call-By-Reference Prinzip übergeben.
    Wenn du schreibst:
    Code:
    skills_neu = @skills
    Dann bedeutet dies, dass das Array welches die Fähigkeiten enthält nicht nur durch die Variable "@skills" sondern auch durch "skills_neu" referenziert wird.
    Du musst dir das so vorstellen als ob es in deinem Speicher irgendwo einen Abschnitt gibt welcher dieses Array darstellt. Irgendein Ding mit Daten.
    Und die Variablen "@skills" und "skills_neu" sind nur Zeiger welche dem Programm sagen an welcher Stelle diese Daten liegen.
    Wenn du den Code
    Code:
    skills_neu = @skills
    schreibst dann sagst du dem Programm er soll den Zeiger in "skills_neu" auf "@skills" setzen. Er wird keine Kopie von den Inhalten anlegen.

    Für dein Vorhaben solltest du entweder
    Code:
    skills_neu = @skills.dup
    benutzen oder die Hilfsvariable "skills_neu" direkt vergessen und auf dem Array "@skills" arbeiten so wie es ist.


    Was mich im Moment noch stutzig macht ist die eigenartige If-Bediengung
    Code:
    if waffe.include?("")
    Das macht nicht sonderlich viel Sinn den leeren String hier zu verwenden, jeder String enthält den leeren String. Das ist als ob du " if true " schreiben würdest nur aufwendiger...

    Was ich ebenfalls nicht ganz verstehe ist folgender Part:
    Code:
    for i in 0..@skills.size
          if @skills[i] < 25
            skills_neu.delete_at(i)
          else
            break
          end
        end
    Erstens muss die Signatur der For-Schleife eher so aussehen:
    Code:
    for i in 0...@skills.size
    Da 2 Punkte ("..") und 3 Punkte ("...") eine andere Semantik haben.
    Dies hier: "for i in 0..4" würde die Zahlen 0, 1, 2, 3 und 4 iterieren, wobei "for i in 0...4" nur über 0, 1, 2 und 3 laufen würde.

    Zweitens ist die gesamte Bedingung innerhalb nicht ganz schlüssig.
    Ich habe den Verdacht, dass du hier eher folgendes Beabsichtigst:
    Code:
    for i in 0...@skills.size
           if @skills[i] < 25
             skills_neu.delete_at(i)
           else
             next
           end
         end

    Geändert von Cornix (11.12.2011 um 21:36 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •