2013-08-17 29 views
9

Đây không phải là bản sao của Ruby equivalent of Perl Data::Dumper. Câu hỏi đó là hơn 3,5 năm tuổi và do đó muốn kiểm tra là có bất kỳ tùy chọn mới có sẵn trong Ruby kể từ đó.Ruby tương đương với "Dữ liệu :: Dumper" của perl để in dấu/khung lồng nhau sâu

Tôi đang tìm perl's Dumper tương đương với ruby. Tôi không quan tâm những gì Dumper làm đằng sau tấm màn. Tôi đã sử dụng nó rộng rãi để in sâu băm lồng nhau và mảng trong perl. Cho đến nay tôi đã không tìm thấy một thay thế trong ruby ​​(Hoặc tôi có thể không có một cách để tận dụng tốt các lựa chọn thay thế có sẵn trong Ruby).

Đây là mã perl của tôi và đầu ra của nó:

#!/usr/bin/perl -w 
use strict; 
use Data::Dumper; 

my $hash; 

$hash->{what}->{where} = "me"; 
$hash->{what}->{who} = "you"; 
$hash->{which}->{whom} = "she"; 
$hash->{which}->{why} = "him"; 

print Dumper($hash); 

OUTPUT:

$VAR1 = { 
      'what' => { 
         'who' => 'you', 
         'where' => 'me' 
        }, 
      'which' => { 
         'why' => 'him', 
         'whom' => 'she' 
        } 
     }; 

Just Love the Dumper. :)

Trong ruby, tôi đã thử pp, p, inspectyaml. đây là mã cùng của tôi trong ruby ​​và sản lượng của nó:

#!/usr/bin/ruby 
require "pp" 
require "yaml" 
hash = Hash.new{ |h,k| h[k] = Hash.new(&h.default_proc) } 

hash[:what][:where] = "me" 
hash[:what][:who] = "you" 
hash[:which][:whom] = "she" 
hash[:which][:why] = "him" 

pp(hash) 
puts "Double p did not help. Lets try single p" 
p(hash) 
puts "Single p did not help either...lets do an inspect" 
puts hash.inspect 
puts "inspect was no better...what about yaml...check it out" 
y hash 
puts "yaml is good for this test code but not for really deep nested structures" 

OUTPUT:

{:what=>{:where=>"me", :who=>"you"}, :which=>{:whom=>"she", :why=>"him"}} 
Double p did not help. Lets try single p 
{:what=>{:where=>"me", :who=>"you"}, :which=>{:whom=>"she", :why=>"him"}} 
Single p did not help either...lets do an inspect 
{:what=>{:where=>"me", :who=>"you"}, :which=>{:whom=>"she", :why=>"him"}} 
inspect was no better...what about yaml...check it out 
--- 
:what: 
    :where: me 
    :who: you 
:which: 
    :whom: she 
    :why: him 
yaml is good for this test code but not for really deep nested structures 

Cảm ơn.

+0

những gì bạn có nghĩa là bởi * yaml là tốt cho mã kiểm tra này, nhưng không cho các cấu trúc lồng nhau thực sự sâu * ? –

+3

đầu ra yaml là đau đớn (ít nhất là đối với tôi) để đọc và giải thích so với Dumper khi nói đến băm/mảng sâu. – slayedbylucifer

+0

downvotes? để làm gì? có vấn đề gì với câu hỏi? – slayedbylucifer

Trả lời

9

gì về Awesome Print:

require 'awesome_print' 
hash = {what: {where: "me", who: "you"}, which: { whom: "she", why: "him"}} 
ap hash 

Output (thực sự với cú pháp tô sáng):

{ 
    :what => { 
     :where => "me", 
      :who => "you" 
    }, 
    :which => { 
     :whom => "she", 
     :why => "him" 
    } 
} 
+0

Aah, awesome_print thực sự tuyệt vời. Cảm ơn @Stefan – slayedbylucifer

Các vấn đề liên quan