Массив распаковки Ruby для блокировки

settings = [ ['127.0.0.1', 80], ['0.0.0.0', 443] ]

Как я могу сделать:

settings.each do |ip, port|  
    ...
end

Вместо:

settings.each do |config|  
    ip, port = *config
    ...
end

Ответ 1

Ваш первый пример работает, потому что Ruby разрушит аргументы блока. См. Статью для получения дополнительной информации о деструкции в рубине.

Ответ 2

Метод, который вы ищете, это массив # map

settings = [ ['127.0.0.1', 80], ['0.0.0.0', 443] ]
settings.map { |ip, port| puts "IP: #{ip} PORT: #{port}"  } 

который вернется
  #//= > IP: 127.0.0.1 ПОРТ: 80
  #//= > IP: 0.0.0.0 PORT: 443