2010-01-21 32 views
40

Có thể thay đổi chiều rộng mà độ nét đẹp (require 'pp') sử dụng khi định dạng đầu ra không? Ví dụ:Định dạng bản in của Ruby

"mooth"=>["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"] 
"morth"=>["forth", 
"mirth", 
"month", 
"mooth", 
"morph", 
"mouth", 
"mowth", 
"north", 
"worth"] 

Mảng đầu tiên được in nội tuyến vì nó phù hợp với chiều rộng cột cho phép (79 ký tự) ... phần thứ hai được chia thành nhiều dòng, bởi vì nó không. Nhưng tôi không thể tìm thấy phương pháp nào để thay đổi cột mà hành vi này bắt đầu.

pp phụ thuộc vào PrettyPrint (có cách để cho phép độ rộng khác nhau cho bộ đệm). Có cách nào để thay đổi độ rộng cột mặc định cho pp mà không cần viết lại từ đầu (truy cập trực tiếp PrettyPrint) không?

Cách khác, có đá quý ruby ​​tương tự cung cấp chức năng này không?

Trả lời

50
#!/usr/bin/ruby1.8 

require 'pp' 
mooth = [ 
    "booth", "month", "mooch", "morth", 
    "mouth", "mowth", "sooth", "tooth" 
] 
PP.pp(mooth, $>, 40) 
# => ["booth", 
# => "month", 
# => "mooch", 
# => "morth", 
# => "mouth", 
# => "mowth", 
# => "sooth", 
# => "tooth"] 
PP.pp(mooth, $>, 79) 
# => ["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"] 

Để thay đổi mặc định với một bản vá khỉ:

#!/usr/bin/ruby1.8 

require 'pp' 

class PP 
    class << self 
    alias_method :old_pp, :pp 
    def pp(obj, out = $>, width = 40) 
     old_pp(obj, out, width) 
    end 
    end 
end 

mooth = ["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"] 
pp(mooth) 
# => ["booth", 
# => "month", 
# => "mooch", 
# => "morth", 
# => "mouth", 
# => "mowth", 
# => "sooth", 
# => "tooth"] 

Những phương pháp này cũng làm việc trong MRI 1.9.3

4

Found "ap" aka "Awesome_Print" hữu ích cũng từ git-repo

Mã được sử dụng để kiểm tra trang và ap:

require 'pp' 
require 'ap' #requires gem install awesome_print 

data = [false, 42, %w{fourty two}, {:now => Time.now, :class => Time.now.class, :distance => 42e42}] 
puts "Data displayed using pp command" 
pp data 

puts "Data displayed using ap command" 
ap data 

O/P từ pp vs ap:

Data displayed using pp command 
[false, 
42, 
["fourty", "two"], 
{:now=>2015-09-29 22:39:13 +0800, :class=>Time, :distance=>4.2e+43}] 

Data displayed using ap command 
[ 
    [0] false, 
    [1] 42, 
    [2] [ 
     [0] "fourty", 
     [1] "two" 
    ], 
    [3] { 
      :now => 2015-09-29 22:39:13 +0800, 
      :class => Time < Object, 
     :distance => 4.2e+43 
    } 
] 

tham khảo:

+0

Đây là thêm chi tiết thú vị. Tuy nhiên, nó không phải là câu trả lời cho câu hỏi được yêu cầu - để "wit", "bốn mươi", "hai" nên ở trên một dòng, theo những gì mà OP đang tìm kiếm. Ngoài ra, tôi nghĩ rằng đối với bất cứ ai đáng xem xét sử dụng, đáng chú ý rằng đầu ra 'ap' được hiển thị ở đây không thể được đọc lại bởi ruby ​​eval (đặc biệt vì các chỉ số mảng được hiển thị theo cách đó), cách ' Sản lượng của trang thường xuyên có thể là (nó chỉ thay đổi khoảng trắng cho các kiểu đối tượng cơ bản - mặc dù đối tượng thời gian hiển thị rõ ràng một ngoại lệ cho điều đó). Chỉ là thức ăn cho sự suy nghĩ. – lindes

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