@Rettan @Cornix
Zitat Zitat
Dann ist das Break keinesfalls richtig.

Hier ein Beispiel mit deinem Code:
@skills[0] = 4
@skills[1] = 27
@skills[2] = 9

Was würde nach der Ausführung von diesem Code-Abschnitt passieren:

Code:
i = 0     
while i < @skills.size
      if @skills[i] < 25
        @skills.delete_at(i)
        i -= 1
      else
        break
      end
      i += 1
    end
Ganz einfach:

Schritt 1:
i = 0
@skills[0] == 4 < 25 => true
-> @skills.delete_at(0)

Schritt 2:
i = 1
@skills[1] == 27 < 25 => false
-> break
Die Schleife so zu benutzen ist eh semantisch falsch, wenn man keinen iterator benutzt.
Schritt 1 löscht @skills[0]
Ruby unshiftet das Array jetzt - was vorher @skills[1] war, rutscht an die freigewordene Stelle von @skills[0]
Schritt 2 würde jetzt also mit @skills[1]=9 arbeiten - das ursprüngliche @skills[1]=27 würde ignoriert werden. In dem Fall der gewünschte Effekt, aber vertausche 9 und 27 in dem Beispiel, und du hast einen unerwünschten Effekt. Schritte dagegen sind i in dem Fall einer Löschung runterzusetzen oder gleich iteratoren zu nehmen

@KD
Du magst recht haben, aber je nachdem wie eingearbeitet man ist und woher man kommt, ist man halt gewohnt mit while und for zu arbeiten - seit dem ich sie kenne nutze ich gerne Iteratoren, aber nehm auch gern hier und da eine for - aus gewohnheit, weil ich es dann besser lesen kann und weil ich auch nicht alle iteratoren kenne. Gerader der lesbarkeithalber bevorzuge ich for-Schleifen sogar vor Array#each und Numeric#times - solange es hinterher funktioniert^^.
Zumindest solange es bei RGSS bleibt, wenn man vernünftige Programme mit Ruby schreiben will ist es durchaus korrekt, sich das erst garnicht anzugewöhnen. Aber ein Großteil der User hier gehört wohl eher zu den Leuten, die damit nicht ausserhalb des RGSS arbeiten wollen.

@include?("")-Thema
Hm, okay, ich hatte es vermutet dass String die Funktion hat, ich konnte es mir nur nicht bestätigen. Wenn es also wirklich um String#include? geht, dann,Rettan, ergibt weder .include?("") noch !.include?("") Sinn - wenn das Element wirklich ein String ist, ist der leere String immer enthalten - da würde sich eher ein Codezeichen für Anbieten, sei es irgendein sonst unbenutztes Zeichen inkl. dem Leerzeichen