Ich machte ein Programm, das Strings von Namen in einem Array speichert, es fragt nach Benutzereingabe mit gets.chomp, nach der Eingabe ADD Name, fügt er den Namen in ein Array mit Push und DEL Name, um diesen Namen aus dem Array zu löschen, jetzt möchte ich "REPLACE Name1 Name2" eingeben, um Name1 durch Name2 im Array zu ersetzen. Vielen Dank im Voraus :)Wechseln von Wörtern in einem String-Satz mit Ruby
class Base
@@names_array = Array.new(0)
def set_names_array(name)
@@names_array.push(name)
end
def get_names_array
return @@names_array
end
def delete_name(name)
@@names_array.delete(name)
end
end
class Op
loop_flag = true
puts "Type ADD 'name' to add a name, DEL 'name' to delete, and EXIT to end program."
while loop_flag
command = gets.chomp
@nameobj = Base.new
if command[0..2] == "ADD"
@@name = command[4, command.length]
@nameobj.set_names_array(@@name)
puts "#{@@name} was added."
puts "Names:"
puts "#{@nameobj.get_names_array}"
end
if command == "EXIT"
puts "Ended."
loop_flag = false
end
if command[0..2] == "DEL"
for i in @nameobj.get_names_array
if i == command[4, command.length]
@nameobj.delete_name(i)
puts "Names:"
puts "#{@nameobj.get_names_array}"
end
end
end
if command[0..2] == "REP"
# cannot do [4, command.length] because there will be 2 names with
# various lengths which aren't fixed.
end
end
end
Sie wirklich, wirklich, * wirklich * sollte nicht Code wie das innerhalb einer 'Klasse' Definition setzen. Es dient keinem Zweck. Jede Interaktion mit dem Benutzer sollte innerhalb der tatsächlichen Methoden erfolgen, wenn Sie eine Klasse verwenden. – tadman
Verwenden Sie auch 'commands = gets.chomp.split (/ \ s + /)', um Benutzereingaben in eine Reihe von Wörtern zu zerlegen. Dann können Sie die Wörter "case" und jeden Befehl mit einer geraden where-Klausel behandeln. – tadman
Eine andere Beobachtung ist, dass Sie mit 'break' aus Loops ausbrechen können, also ist' loop do ... end' mit einem 'break' innerhalb besser als eine beliebige loop-endende Variable, die Sie manipulieren müssen. 'break' ist unmittelbar, das Setzen eines Flags ist nicht und kann nicht verhindern, dass anderes Verhalten auftritt. – tadman