是否可以从Ruby文件中访问Pry的show-source
方法?如果是,如何做到这一点?
例如,如果我有这个文件:
# testing.rb
require 'pry'
def testing
puts 'hi'
end
puts show-source testing
运行ruby testing.rb
,我想要输出:
Owner: testing.rb
Visibility: public
Number of lines: 3
def testing
puts 'hi'
end
为了解释这一点的基本原理,我有一个测试来测试一个方法,尽管原始方法似乎偶尔会被调用,我认为输出调用的源代码以查看它来自哪里会很方便。我知道有更简单的方法来做到这一点,虽然开始了这个兔子洞,我有兴趣看看这是否可以做到:)
运行稍微有点复杂的show-source show-source
显示了Pry::Command::ShowSource
类中的一些方法,这些方法继承自Pry::Command::ShowInfo
。Pry::Command::ShowSource
显示了三种方法:options
,process
和content_for
,尽管我无法成功调用任何一个。
我最好的假设是content_for
方法处理这个问题,使用从父类(即Pry::CodeObject.lookup(obj_name, _pry_, :super => opts[:super])
),虽然我还没能破解这个。
有人有这样做的想法或例子吗?
3条答案
按热度按时间hts6caw31#
Ruby有一个内置的方法 Method#source_location,可以用来查找源代码的位置。method_source gem通过基于源位置提取源代码来构建此基础。但是,这不适用于交互式控制台中定义的方法。方法必须在文件中定义。
下面是一个示例:
请记住,所有核心Ruby方法都是用C编写的,并返回
nil
作为源位置。1.method(:+).source_location #=> nil
标准库是用Ruby本身编写的。因此,上面的例子适用于 Set 方法。bvjveswy2#
您可以访问方法的源代码,而无需使用
pry
与Object#方法和Method#source_location
,如以下答案所述:https://stackoverflow.com/a/46966145/5803467lrncoxx3#
如果你想使用Pry来显示一个方法的源代码(而不仅仅是源代码的位置):
.其中
identifier
是方法的标准Pry标识符,例如"MyClass#my_instance_method"
或"MyNamespace.my_static_function"
。