In PHP können Sie tun:Entspricht PHPs print_r in Ruby/Rails?
print_r($var)
oder vardump($var)
, die "Mensch-readible" Informationen über Variable druckt.
Gibt es äquivalente Funktionen/Helfer für die in Ruby/Rails?
In PHP können Sie tun:Entspricht PHPs print_r in Ruby/Rails?
print_r($var)
oder vardump($var)
, die "Mensch-readible" Informationen über Variable druckt.
Gibt es äquivalente Funktionen/Helfer für die in Ruby/Rails?
In Rails-Vorlagen Sie
<%= debug an_object %>
tun können und es wird nette HTML PRE Ausgabe machen.
Versuchen pp mit Sie müssen es in Skripten erfordern (oder in irb, wenn Ihr .irbc dies nicht bereits tun).
require 'pp'
Dann können Sie ‚Schöndruck‘ ein Objekt so:
pp object
Es gibt die Methode inspect
, die hilft. Manchmal hilft das Aufrufen der to_s
-Methode für ein Objekt (to_s gibt eine Zeichenfolgendarstellung des Objekts zurück). Sie können auch methods
, local_variables
, class_variables
, instance_variables
, constants
und global_variables
abfragen.
p ['Hello',"G'day",'Bonjour','Hola'].inspect
# >> "[\"Hello\", \"G'day\", \"Bonjour\", \"Hola\"]"
p ['Hello',"G'day",'Bonjour','Hola'].to_s
# >> "HelloG'dayBonjourHola"
p Array.new.methods
# >> ["select", "[]=", "inspect", "compact"...]
monkey = 'baboon'
p local_variables
# >> ["monkey"]
class Something
def initialize
@x, @y = 'foo', 'bar'
@@class_variable = 'gorilla'
end
end
p Something.class_variables
# >> ["@@class_variable"]
s = Something.new
p s.instance_variables
# >> ["@x", "@y"]
p IO.constants
# >> ["TRUNC", "SEEK_END", "LOCK_SH"...]
p global_variables
# >> ["$-d", "$\"", "$$", "$<", "$_", "$-K"...]
Statt erfordern 'pp' und pp verwenden, können Sie einfach tun
p object
Getestet Beispiel
require 'pp'
class A
def initialize
@a = 'somevar'
@b = [1,2,3]
@c = {'var' => 'val'}
end
end
a = A.new
pp a # Gives -> #<A:0x2c6d048 @a="somevar", @b=[1, 2, 3], @c={"var"=>"val"}>
p a # Gives -> #<A:0x2c6d048 @a="somevar", @b=[1, 2, 3], @c={"var"=>"val"}>. No need to require 'pp'
Überprüfen Sie die Anleitung für das Debuggen Schienen aus: http://guides.rubyonrails.com/debugging_rails_applications.html
Hinweise: script/console ist großes Material im Zusammenhang mit Ihrer App script/server, um zu versuchen --debugger den Server mit einem Debugger zu starten gedreht auf, können Sie dann 'Debug' in Ihrem Code verwenden, um in eine interaktive Shell zu brechen
Raten Sie, ich bin ein wenig zu spät, aber was ist mit logger.info [debug | warning]? Verwenden Sie dies von Controllern und Modellen. Es wird in Ihren Protokolldateien angezeigt (development.log im Modus "dev"). und die oben erwähnten für Ansichten.
Dies sind keine genauen Antworten auf Ihre Fragen, aber Sie können auch mit script/console Ihre Rails-App in eine interaktive Sitzung laden.
Schließlich können Sie Debugger in eine Zeile Ihrer Rails-Anwendung platzieren und der Browser wird "hängen", wenn Ihre App diese Zeile ausführt und Sie in einer Debug-Sitzung von der genauen Zeile Ihres Debuggers platziert werden können im Quellcode.
Ich habe diesen Code in Controller geschrieben ---- Def-Index @users = User.all Ende --- jetzt ich Array drucken möchte ich dies anwenden <% = debuggen (@users)%> aber nicht funktioniert :( – Harman
Ein Ansatz, den ich auf eine Menge anlehnen, ist dies:
logger.debug "OBJECT: #{an_object.to_yaml}"
Leicht zu lesen, obwohl es ein wenig unhandlich für große Objekte zu bekommen.
Ich weiß, dies ist ein alter Post, aber es ist das erste, was Google erscheint bei der Suche nach "Ruby Äquivalent von PHP print_r". Ich verwende Ruby im Befehlszeilenmodus, und es gibt wirklich kein sehr gutes Äquivalent. "pp" ist in Ordnung für ziemlich einfache Strukturen, aber sobald Sie Hashes in Arrays in Hashes in mehreren Arrays verschachteln, wird es ziemlich schnell zu einem Durcheinander. Da ich keine gute Emulation von print_r gefunden habe, habe ich selbst eine geschrieben. Es ist gut genug für meine Zwecke, nicht übermäßig kompliziert und ich dachte, ich würde es teilen, um anderen Leuten Kopfschmerzen zu ersparen. Vergleichen Sie die Ausgabe mit dem real 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
Hier ist ein Beispiel (aus chaotisch absichtlich zu zeigen, warum die PHP print_r so schön ist):
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)
Ausgabe von print_r (eigentlich verständlich von einem Menschen):
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
)
)
ist es in View-Datei oder Controller? – Harman