非常教程

Ruby 2.4参考手册

完整输出 | PrettyPrint

PP::PPMethods

Public Instance Methods

check_inspect_key(id) Show source

检查object_id id是否位于要打印的对象的当前缓冲区中。用于打破要打印的物体链中的周期。

# File lib/pp.rb, line 155
def check_inspect_key(id)
  Thread.current[:__recursive_key__] &&
  Thread.current[:__recursive_key__][:inspect] &&
  Thread.current[:__recursive_key__][:inspect].include?(id)
end

comma_breakable() Show source

一种方便的方法,如下所示:

text ','
breakable
# File lib/pp.rb, line 212
def comma_breakable
  text ','
  breakable
end

guard_inspect_key() { || ... } Show source

产生一个块并保留前一组要打印的对象。

# File lib/pp.rb, line 133
def guard_inspect_key
  if Thread.current[:__recursive_key__] == nil
    Thread.current[:__recursive_key__] = {}.taint
  end

  if Thread.current[:__recursive_key__][:inspect] == nil
    Thread.current[:__recursive_key__][:inspect] = {}.taint
  end

  save = Thread.current[:__recursive_key__][:inspect]

  begin
    Thread.current[:__recursive_key__][:inspect] = {}.taint
    yield
  ensure
    Thread.current[:__recursive_key__][:inspect] = save
  end
end

object_address_group(obj, &block) Show source

一种便利的方法,如#object_group,但也会重新格式化Object的object_id。

# File lib/pp.rb, line 202
def object_address_group(obj, &block)
  str = Kernel.instance_method(:to_s).bind(obj).call
  str.chomp!('>')
  group(1, str, '>', &block)
end

object_group(obj) { || ... } Show source

一种方便的方法,如下所示:

group(1, '#<' + obj.class.name, '>') { ... }
# File lib/pp.rb, line 196
def object_group(obj, &block) # :yield:
  group(1, '#<' + obj.class.name, '>', &block)
end

pop_inspect_key(id) Show source

从好的打印的对象集中移除一个对象。

# File lib/pp.rb, line 168
def pop_inspect_key(id)
  Thread.current[:__recursive_key__][:inspect].delete id
end

pp(obj) Show source

obj使用Object#pretty_print或Object#pretty_print_cycle 添加到漂亮的打印缓冲区。

对象#pretty_print_cycle在obj已经打印时使用,也就是说对象引用链有一个循环。

# File lib/pp.rb, line 177
def pp(obj)
  id = obj.object_id

  if check_inspect_key(id)
    group {obj.pretty_print_cycle self}
    return
  end

  begin
    push_inspect_key(id)
    group {obj.pretty_print self}
  ensure
    pop_inspect_key(id) unless PP.sharing_detection
  end
end

pp_hash(obj) Show source

A pretty print for a Hash

# File lib/pp.rb, line 271
def pp_hash(obj)
  group(1, '{', '}') {
    seplist(obj, nil, :each_pair) {|k, v|
      group {
        pp k
        text '=>'
        group(1) {
          breakable ''
          pp v
        }
      }
    }
  }
end

pp_object(obj) Show source

目前的标准故障安全可以用来打印任何给定的对象

# File lib/pp.rb, line 255
def pp_object(obj)
  object_address_group(obj) {
    seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v|
      breakable
      v = v.to_s if Symbol === v
      text v
      text '='
      group(1) {
        breakable ''
        pp(obj.instance_eval(v))
      }
    }
  }
end

push_inspect_key(id) Show source

将object_id添加id到漂亮打印的对象集合中,以便不重复对象。

# File lib/pp.rb, line 163
def push_inspect_key(id)
  Thread.current[:__recursive_key__][:inspect][id] = true
end

seplist(list, sep=nil, iter_method=:each) { |element| ... } Show source

添加一个分隔列表。默认情况下,该列表以逗号分隔,并且有易碎空间。

seplist迭代list使用iter_method。它将每个对象产生给给seplist的块。该程序separator_proc在每个收益之间调用。

如果迭代次数为零,separator_proc则根本不调用。

如果separator_proc没有或没有给出,则使用+ lambda {#comma_breakable} +。如果iter_method没有给出,则分别使用。

例如,以下3个代码片段具有相似的效果。

q.seplist([1,2,3]) {|v| xxx v }

q.seplist([1,2,3], lambda { q.comma_breakable }, :each) {|v| xxx v }

xxx 1
q.comma_breakable
xxx 2
q.comma_breakable
xxx 3
# File lib/pp.rb, line 241
def seplist(list, sep=nil, iter_method=:each) # :yield: element
  sep ||= lambda { comma_breakable }
  first = true
  list.__send__(iter_method) {|*v|
    if first
      first = false
    else
      sep.call
    end
    yield(*v)
  }
end

完整输出 | PrettyPrint相关

Ruby 2.4

Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言,是世界上最优美而巧妙的语言。

主页 https://www.ruby-lang.org/
源码 https://github.com/ruby/ruby
版本 2.4
发布版本 2.4.1

Ruby 2.4目录

1.缩略 | Abbrev
2.ARGF
3.数组 | Array
4.Base64
5.基本对象 | BasicObject
6.基准测试 | Benchmark
7.BigDecimal
8.绑定 | Binding
9.CGI
10.类 | Class
11.比较 | Comparable
12.负责 | Complex
13.计算续体 | Continuation
14.覆盖 | Coverage
15.CSV
16.日期 | Date
17.日期时间 | DateTime
18.DBM
19.代理 | Delegator
20.摘要 | Digest
21.Dir
22.DRb
23.编码 | Encoding
24.枚举 | Enumerable
25.枚举 | Enumerator
26.ENV
27.ERB
28.错误 | Errors
29.Etc
30.期望值 | Exception
31.错误类 | FalseClass
32.Fiber
33.Fiddle
34.文件 | File
35.文件实用程序 | FileUtils
36.查找 | Find
37.浮点 | Float
38.Forwardable
39.GC
40.GDBM
41.GetoptLong
42.Hash
43.Integer
44.IO
45.IPAddr
46.JSON
47.Kernel
48.语言 | 3Language
49.记录 | Logger
50.编排 | Marshal
51.MatchData
52.数学 | Math
53.矩阵 | Matrix
54.方法 | Method
55.模型 | Module
56.监控 | Monitor
57. 互斥 | Mutex
58.Net
59.Net::FTP
60.Net::HTTP
61.Net::IMAP
62.Net::SMTP
63.NilClass
64.数字 | Numeric
65.对象 | Object
66.ObjectSpace
67.Observable
68.Open3
69.OpenSSL
70.OpenStruct
71.OpenURI
72.OptionParser
73.路径名 | Pathname
74.完整输出 | PrettyPrint
75.Prime
76.Proc
77.过程 | Process
78.PStore
79.PTY
80.队列 | Queue
81.随机 | Random
82.范围 | Range
83.合理的 | Rational
84.Readline
85.Regexp
86.Resolv
87.Ripper
88.RubyVM
89.Scanf
90.SDBM
91.SecureRandom
92.Set
93.Shell
94.信号 | Signal
95.Singleton
96.套接字 | Socket
97.字符串 | String
98.StringIO
99.StringScanner
100.结构 | Struct