Yapabileceğiniz: değişken hakkındaRuby'nin/Rails'in PHP's print_r'i var mı? PHP
print_r($var)
veya vardump($var)
yazdırır
"insan-Okunması" bilgisini.
Ruby/Rails'dekiler için eşdeğer fonksiyonlar/yardımcılar var mı?
Yapabileceğiniz: değişken hakkındaRuby'nin/Rails'in PHP's print_r'i var mı? PHP
print_r($var)
veya vardump($var)
yazdırır
"insan-Okunması" bilgisini.
Ruby/Rails'dekiler için eşdeğer fonksiyonlar/yardımcılar var mı?
Test örneği
p object
yapabilirsiniz ve güzel HTML PRE çıkışı yapacak.
s kullanmayı deneyin (veya irb da .irbc zaten bu yapmazsa) komut bunu gerektirir gerekir. Sonra
require 'pp'
yapabilirsiniz 'PrettyPrint' Bir nesneyi böylece:
pp object
inspect
yönteminde yardımcı olan bir yöntem vardır. Bazen bir nesne üzerinde to_s
yöntemini çağırmak yardımcı olacaktır (to_s, nesnenin bir dizgi temsilini döndürür). Ayrıca, methods
, local_variables
, class_variables
, instance_variables
, constants
ve global_variables
sorgulayabilirsiniz. Bunun yerine 's' ve pp kullanarak gerektiren
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"...]
, sadece sen
<%= debug an_object %>
yapabilirsiniz Raylar şablonda
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'
Kontrol dışarı ayıklama rayları için rehber: http://guides.rubyonrails.com/debugging_rails_applications.html
ipuçları: komut/konsol döndü bir hata ayıklayıcı ile sunucuyu başlatmak için uygulama komut/sunucunun --debugger bağlamında şeyler denemek için harika Ondan sonra, kodunuzdaki 'debug' komutunu interaktif bir kabukta kullanabilirsiniz.
Sanırım biraz geç kaldım, ama logger.info [debug | warning] hakkında ne haber? Bunu Kontrolörlerden ve Modellerden kullanın. Günlük dosyalarınızda görünecektir (dev modda iken development.log); ve görünümler için yukarıda belirtilen <%= debug("str: " + str) %>
.
Bunlar, sorularınızın tam olarak yanıtı değildir, ancak raylar uygulamanızı etkileşimli bir oturuma yüklemek için komut dosyasını/konsolu da kullanabilirsiniz. Son olarak, ray uygulamanızın bir satırına hata ayıklayıcısını yerleştirebilirsiniz ve uygulama bu satırı yürüttüğünde tarayıcı "askıda kal" olacak ve tam satırdan bir hata ayıklama oturumunda bulunabileceksiniz. kaynak kodunda. o büyük nesneler için biraz hantal alabilirsiniz, ancak, okumayı
logger.debug "OBJECT: #{an_object.to_yaml}"
Kolay: Ben çok dayanacağı
Bu kodu yazmacı denetleyicisi ---- def dizinine yazarım. @users = Kullanıcı.all son --- şimdi diziyi yazdırmak istiyorum Bunu uygulamak istiyorum <% = debug (@users)%> fakat çalışmıyor :( – Harman
bir yaklaşım budur.
Bunun eski bir yayın olduğunu biliyorum, ancak Google'ın "Ruby print of print_r" eşdeğeri için arama yapması gereken ilk şey. Komut satırı modunda Ruby kullanıyorum ve gerçekten çok iyi bir eşdeğer değil. Oldukça basit yapılar için "pp" tamam, ama daha fazla dizide karma halinde dizilerdeki karmaları yerleştirmeye başladığınızda, oldukça hızlı bir karmaşaya dönüşüyor. İyi bir print_r öyküsü bulamadığım için kendim yazdım. Amaçlarım için yeterince iyi, aşırı karmaşık değil ve diğer insanlara bazı baş ağrısını kurtarmak için paylaşacağımı düşündüm. (PHP print_r çok güzel neden göstermek için bilerek dağınık yapılan) bir örnek Burada 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
ile çıkış var karşılaştırın:
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 (a insan tarafından aslında anlaşılır) Çıktı:
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
)
)
bu dosya veya denetleyicide mi var? – Harman