Я знаю, что это старый пост, но это первое, что Google выскакивает, когда ищет "Ruby эквивалент PHP print_r". Я использую Ruby в режиме командной строки, и там действительно не очень хороший эквивалент. «pp» подходит для довольно простых структур, но как только вы начинаете вкладывать хэши в массивы в хэши в большее количество массивов, он довольно быстро превращается в беспорядок. Так как я не нашел хорошую эмуляцию print_r, я написал ее сам. Это достаточно хорошо для моих целей, не слишком сложно, и я решил поделиться этим, чтобы избавить других от головной боли. Сравните вывод с реальным PHP print_r
def print_r(inHash, *indent)
@indent = indent.join
if (inHash.class.to_s == "Hash") then
print "Hash\n#{@indent}(\n"
inHash.each { |key, value|
if (value.class.to_s =~ /Hash/) || (value.class.to_s =~ /Array/) then
print "#{@indent} [#{key}] => "
self.print_r(value, "#{@indent} ")
else
puts "#{@indent} [#{key}] => #{value}"
end
}
puts "#{@indent})\n"
elsif (inHash.class.to_s == "Array") then
print "Array\n#{@indent}(\n"
inHash.each_with_index { |value,index|
if (value.class.to_s == "Hash") || (value.class.to_s == "Array") then
print "#{@indent} [#{index}] => "
self.print_r(value, "#{@indent} ")
else
puts "#{@indent} [#{index}] => #{value}"
end
}
puts "#{@indent})\n"
end
# Pop last indent off
8.times {@indent.chop!}
end
Вот пример (специально запутанный, чтобы показать, почему PHP print_r так хорош):
carTools = [ "Socket Set", "Combination Wrenches", "Oil Filter puller", "Brake Compressor" ]
houseTools =[ "Circular Saw", "Miter Saw", "Drill" ]
garageItems = Hash["Car1" => "Ford Mustang", "Car2" => "Honda Civic", "Bike1" => "IronHorse"]
garageItems["Tools"] = Hash["Car Tools" => carTools, "House Tools" => houseTools]
constructionSupplies = Hash["Plywood" => ["3/4\" T&G Plywood Sheets", "1/2\" Plywood Sheets"],
"Boards" => ["2x4s", "2x6s", "Engineered I-Joists"],
"Drywall" => ["4x8 1/2\" Sheetrock", "Mesh tape", "Paper tape", "Joint compount"]]
carParts = Hash["Mustang" => ["Clutch", "Transmission", "3.55 Ring & Pinion Gears", "Differential", "30# Injectors", "Pro-M 77mm MAF"]]
garageItems["Supplies"] = ["Oil", "WD40", constructionSupplies, carParts, "Brake Fluid"]
print_r(garageItems)
Вывод print_r (на самом деле понятен человеку):
Hash
(
[Car1] => Ford Mustang
[Car2] => Honda Civic
[Bike1] => IronHorse
[Tools] => Hash
(
[Car Tools] => Array
(
[0] => Socket Set
[1] => Combination Wrenches
[2] => Oil Filter puller
[3] => Brake Compressor
)
[House Tools] => Array
(
[0] => Circular Saw
[1] => Miter Saw
[2] => Drill
)
)
[Supplies] => Array
(
[0] => Oil
[1] => WD40
[2] => Hash
(
[Plywood] => Array
(
[0] => 3/4" T&G Plywood Sheets
[1] => 1/2" Plywood Sheets
)
[Boards] => Array
(
[0] => 2x4s
[1] => 2x6s
[2] => Engineered I-Joists
)
[Drywall] => Array
(
[0] => 4x8 1/2" Sheetrock
[1] => Mesh tape
[2] => Paper tape
[3] => Joint compount
)
)
[3] => Hash
(
[Mustang] => Array
(
[0] => Clutch
[1] => Transmission
[2] => 3.55 Ring & Pinion Gears
[3] => Differential
[4] => 30# Injectors
[5] => Pro-M 77mm MAF
)
)
[4] => Brake Fluid
)
)