名前の文字列を配列に格納するプログラムを作成しました。これはgets.chompを使用してユーザーの入力を求めることから始まり、ADD Nameをタイプした後、pushを使用して配列に名前を追加します、およびDel Nameを使用して配列からその名前を削除すると、 "Replacement Name1 Name2"と入力してName1をName2に置き換えます。 はあなたがBase class
に、このメソッドを追加することができます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
実際には、本当に*本当に*そのようなコードを 'class'定義の中に入れてはいけません。それは目的を果たさない。クラスを使用している場合は、実際のメソッド内でユーザーとのやり取りを行う必要があります。 – tadman
また、 'commands = gets.chomp.split(/ \ s + /)'を使ってユーザー入力を一連の単語に分割することも検討してください。次に、単語を 'case'し、各コマンドを真っ直ぐな' where'節で処理します。 – tadman
もう1つのことは、 'break'を使ってループを壊すことができるということです。内部で' break'を使って 'loop do ... end'を実行することは、操作する必要のある任意のループ終了変数を持つよりも優れています。 'break'は即時ですが、フラグを設定することはできません。また、他の動作の発生を防ぐことはできません。 – tadman