4

ルビーの次のコードを考えてみましょう。どこかからprestartを呼び出したと仮定します。

def tester(process_name, *host_list)
  hosts = []
  hosts = host_list[0]
  hosts[0] = nil
end

def prestart(process_name, *host)
  host_list = ['192.168.1.1', '192.168.1.2'] 
  puts host_list.inspect  # -> ['192.168.1.1', '192.168.1.2']
  tester(process_name, host_list)
  puts host_list.inspect  # -> [nil, '192.168.1.2']
  abort
end

どのようにしてゼロになりましたか?これはルビーのしくみですか?はいの場合、発信者に影響がないことを確認するにはどうすればよいですか?

4

1 に答える 1

3

配列はオブジェクトであるため、参照によって過去になります。オリジナルに影響を与えずに変更したい場合は、それを呼び出して複製する必要があります.dup。呼び出し元または呼び出されたメソッドで実行できます。

于 2012-04-25T11:13:27.497 に答える