我正在玩撬,并打了一些令我困惑的东西。
irb
pry
cd Array
pry(Array):>
show-method
返回:
def pretty_print ...
def pretty_print_cycle ...
那些方法在哪里?我从Ruby Array doc查看了ruby数组,但找不到方法。我去了search for array in github ruby project并看到了Array.c并找不到Array.rb。即使这样,我也无法在Array.c中找到pretty_print。
有人可以帮我理解吗?
谢谢!
答案 0 :(得分:2)
试试这个:
[].method(:pretty_print).source_location
=> ["/home/joel/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/pp.rb", 328]
似乎show-method提供了相同的信息:
show-method [].pretty_print
From: /home/joel/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/pp.rb @ line 328:
Owner: Array
Visibility: public
Number of lines: 7
def pretty_print(q)
q.group(1, '[', ']') {
q.seplist(self) {|v|
q.pp v
}
}
end
pry.rb需要pp:
https://github.com/pry/pry/blob/dd2d9b927b0afbe4e5463ff1558c566abbdb0473/lib/pry.rb
答案 1 :(得分:0)
这些方法不在默认的Array
实现中。请尝试[].pretty_print
中的irb
,您将收到错误消息。结论是 pry 将这些方法添加到Array
。在Ruby中,可以向现有的类和对象添加新方法,甚至是内置类和对象,例如(在irb
中):
> arr = [0,1,2]
> arr.pretty_print
NoMethodError: undefined method `pretty_print' for [0, 1, 2]:Array
> class Array
> def pretty_print
> "*** #{inspect} ***"
> end
> end
> arr.pretty_print
=> "*** [0, 1, 2] ***"