process_a_pile_more_recordsメソッドでは、テストメソッドで定義されているのと同じ参照を使用して、メソッドへのパラメーターをインスタンス化しています。
ただし、iProcessed + = 1を実行すると、実際には、元のオブジェクトをインクリメントするのではなく、インクリメントされた値を持つ新しいオブジェクトをiProcessedに向けることになります。iWorkedでも同じです。trueを指すようにiWorkedを変数に設定しています。
基になるオブジェクトを実際に変更した変数に対してメソッドを実行する場合は、呼び出し元のメソッドにその結果が表示されます。次のコードサンプルを参照してください。ここでは、配列に要素を追加して、元のオブジェクトまたはgsubを変更します。メソッドは、下にある文字列を変更します。gsubメソッドを使用した場合、新しい文字列が作成されたため、基になるオブジェクトに変更が加えられなかったことに注意してください。
process_a_pile_more_recordsの2回目の呼び出しで、testメソッドの元の変数に、process_a_pile_more_recordsメソッドから返されたものに基づいて新しい値が与えられることに注意してください。
test "local variable manipulation" do
processed = 123
worked = false
string1 = 'Hello'
string2 = 'Goodbye'
an_array = []
process_a_pile_more_records(processed , worked, string1, string2, an_array)
puts 'Output the variables'
puts processed
puts worked
puts string1
puts string2
puts an_array.to_s
processed, worked, string1 = process_a_pile_more_records(processed , worked, string1, string2, an_array)
puts processed
puts worked
puts string1
puts string2
puts an_array.to_s
終わり
def process_a_pile_more_records(processed_var、worked_var、first_string、second_string、an_array)(0..10).each do | id | processed_var + = 1worked_var = true first_string = first_string + id.to_s second_string.gsub!('oo'、 '00')an_array << id.to_s end returnprocessed_var、worked_var、first_string end
これにより、次の出力が生成されます。
Testing started at 14:38 ...
Output the variables
123
false
Hello
G00dbye
["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
134
true
Hello012345678910
G00dbye
["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]