©John Mair(Banisterfiend)2018
(创建者)
©Kyrylo Silin(Kyrylosilin)2018
(维护者)
校友:
链接:
Pry是具有强大内省功能的运行时开发人员和IRB替代方案。 PRY的目的不仅仅是IRB替代品。这是一种将带式驱动的编程带入红宝石语言的尝试。
edit Class#method
)cd
, ls
和朋友) gem 'pry' , '~> 0.15.0'
gem install pry
pry相当灵活,允许大量的用户自定义。从具有readline
方法的任何对象中读取并写入具有puts
方法的任何对象是微不足道的。 PRY的许多其他方面也可以配置,这是实现自定义外壳的理想选择。
pry带有可执行文件,因此可以在命令行中调用它。只需输入pry
开始即可。 $XDG_CONFIG_HOME/pry/
或用户主目录中的pryrc
文件如果存在。键入pry --help
在命令行中键入pry以获取更多信息。
撬动会话中的几乎每个功能都是作为命令实现的。命令不是方法,必须从行的开头开始,两者之间没有空格。命令支持灵活的语法,并以与shell命令相同的方式允许“选项”,例如,以下pry命令将显示以“ pa'”开头的所有私人实例方法(范围)的列表
pry ( YARD :: Parser :: SourceParser ) : 5 > ls - Mp -- grep ^ pa
YARD :: Parser :: SourceParser #methods: parse parser_class parser_type parser_type= parser_type_for_filename
pry允许我们使用cd
命令从不同的范围(对象)中弹出和弹出。这使我们能够探索程序或库的运行时间视图。要查看特定范围内哪些变量和方法,我们使用versatile ls命令。
在这里,我们将开始撬开顶级,然后在类上撬开该类的实例变量:
pry ( main ) > class Hello
pry ( main ) * @x = 20
pry ( main ) * end
=> 20
pry ( main ) > cd Hello
pry ( Hello ) : 1 > ls - i
instance variables : @x
pry ( Hello ) : 1 > cd @x
pry ( 20 ) : 2 > self + 10
=> 30
pry ( 20 ) : 2 > cd ..
pry ( Hello ) : 1 > cd ..
pry ( main ) > cd ..
:
在pry提示中的数字表示嵌套级别。要显示有关嵌套的更多信息,请使用nesting
命令。例如
pry ( "friend" ) : 3 > nesting
Nesting status :
0 . main ( Pry top level )
1 . Hello
2 . 100
3 . "friend"
=> nil
然后,我们可以使用jump-to
命令来跳回以前的任何嵌套级别:
pry ( "friend" ) : 3 > jump - to 1
= > 100
pry ( Hello ) : 1 >
可以在运行程序的中间调用pry。它在被调用的时候打开了一个撬动会议,并在当时提供所有程序状态。可以使用my_object.pry
语法或使用binding.pry
在任何对象上调用它。然后,撬动会话将在对象(或绑定)的范围内开始。当会话结束时,程序继续进行您进行的任何修改。
此功能可用于以下内容:调试,实现开发人员控制台和应用热补丁。
代码:
# test.rb
require 'pry'
class A
def hello ( ) puts "hello world!" end
end
a = A . new
# start a REPL session
binding . pry
# program resumes here (after pry session)
puts "program resumes here."
pry会话:
pry ( main ) > a . hello
hello world!
=> nil
pry ( main ) > def a . goodbye
pry ( main ) * puts "goodbye cruel world!"
pry ( main ) * end
=> :goodbye
pry ( main ) > a . goodbye
goodbye cruel world!
=> nil
pry ( main ) > exit
program resumes here .
以“”开头的输入线。将转发到命令外壳。这使我们能够导航文件系统,产生编辑器,并直接从pry内部运行git和rake。
此外,我们可以使用shell-mode
命令将当前的工作目录集成到pry提示中,并将(在此阶段有限,对不起)文件名称完成(有限)。我们还可以使用普通#{}
字符串插值语法直接将红宝石代码插入外壳中。
在下面的代码中,我们将切换到shell-mode
并编辑pryrc
文件。然后,我们将其内容猫并重新加载文件。
pry ( main ) > shell - mode
pry main : /home/john / ruby / projects / pry $ . cd ~
pry main : /home/john $ . emacsclient . pryrc
pry main : /home/john $ . cat . pryrc
def hello_world
puts "hello world!"
end
pry main : /home/john $ load ".pryrc"
=> true
pry main : /home/john $ hello_world
hello world!
我们还可以将红宝石代码插入外壳中。在下面的示例中,我们在当前目录的随机文件上使用shell命令cat
,并使用wc
中的该文件中的行数:
pry main : /home/john $ . cat #{Dir['*.*'].sample} | wc -l
44
您可以使用show-source
命令浏览方法源代码。几乎所有Ruby方法(以及一些C方法,带有Pry-Doc Gem)都可以查看其来源。通过Pager发送的代码比页面更长(例如较少),并且所有代码均可正确地突出显示(甚至C代码)。
show-source
命令接受两个语法,即典型的RI Class#method
语法,也仅仅是范围中的方法的名称。您可以选择传递-l
选项以show-source
以在输出中包含线号。
在下面的示例中,我们将输入Pry
类,列出以“ SE”开头的实例方法,并显示set_last_result
方法的源代码:
pry ( main ) > cd Pry
pry ( Pry ) : 1 > ls - M -- grep se
Pry #methods: raise_up raise_up! raise_up_common reset_eval_string select_prompt set_last_result
pry ( Pry ) : 1 > show - source set_last_result - l
From : /home/john / ruby / projects / pry / lib / pry / pry_instance . rb : 405 :
Owner : Pry
Visibility : public
Signature : set_last_result ( result , code = ?)
Number of lines : 6
405 : def set_last_result ( result , code = "" )
406 : @last_result_is_exception = false
407 : @output_ring << result
408 :
409 : self . last_result = result unless code =~ / A s * z /
410 : end
请注意,我们还可以使用pry-doc
插件查看C方法(来自Ruby Core);我们还展示了show-source
的替代语法:
pry ( main ) > show - source Array #select
From : array . c in Ruby Core ( C Method ) :
Number of lines : 15
static VALUE
rb_ary_select ( VALUE ary )
{
VALUE result ;
long i ;
RETURN_ENUMERATOR ( ary , 0 , 0 ) ;
result = rb_ary_new2 ( RARRAY_LEN ( ary ) ) ;
for ( i = 0 ; i < RARRAY_LEN ( ary ) ; i ++ ) {
if ( RTEST ( rb_yield ( RARRAY_PTR ( ary ) [ i ] ) ) ) {
rb_ary_push ( result , rb_ary_elt ( ary , i ) ) ;
}
}
return result ;
}
一个用于pry的用例是在运行时探索一个程序,并通过cd
-ing进出对象以及查看和调用方法。在探索过程中,阅读文档的特定方法可能很有用。 show-source
命令支持两种语法 - 正常的ri
语法以及接受当前范围中的任何方法的名称。
撬文件系统不依赖于预先生成的rdoc
或ri
,而是直接按需捕获评论。这会导致更快的文档检索,并允许pry系统检索文档,以获取rdoc
不会拾取的方法。 Pry还对RDOC和院子格式都有基本的理解,并将试图适当地强调文档。
但是, ri
功能非常好,并且比Pry的系统具有优势,因为它允许查找类别和方法的文档查找。因此,pry通过ri
命令与ri
具有良好的整合。命令的语法与命令行完全相同 - 因此不需要引用字符串。
在我们的示例中,我们将输入Gem
类,并查看try_activate
方法的文档:
pry ( main ) > cd Gem
pry ( Gem ) : 1 > show - source try_activate - d
From : /Users/john / rbenv / versions / 2.7 . 1 / lib / ruby / 2.7 . 0 / rubygems . rb : 194 :
Owner : #<Class:Gem>
Visibility : public
Signature : try_activate ( path )
Number of lines : 28
Try to activate a gem containing path . Returns true if
activation succeeded or wasn 't needed because it was already
activated. Returns false if it can' t find the path in a gem .
def self . try_activate ( path )
# finds the _latest_ version... regardless of loaded specs and their deps
# if another gem had a requirement that would mean we shouldn't
# activate the latest version, then either it would already be activated
# or if it was ambiguous (and thus unresolved) the code in our custom
# require will try to activate the more specific version.
spec = Gem :: Specification . find_by_path path
pry ( Gem ) : 1 >
我们还可以以正常方式使用ri
:
pry ( main ) ri Array #each
----------------------------------------------------------- Array #each
array . each { | item | block } -> array
------------------------------------------------------------------------
Calls _block_ once for each element in _self_ , passing that element
as a parameter .
a = [ "a" , "b" , "c" ]
a . each { | x | print x , " -- " }
produces :
a -- b -- c --
您可以使用edit Class#method
或edit my_method
(如果方法为范围)来打开直接在您喜欢的编辑器中编辑的方法。 PRY了解一些不同的编辑器,并将尝试在该方法定义的行中打开文件。
您可以通过分配给Pry.editor
登录器来设置编辑器。 Pry.editor
将默认为$EDITOR
或将使用nano
作为备份默认值的失败。退出编辑器后,编辑的文件将自动重新加载 - 可以通过传递--no-reload
选项来抑制重新加载,以edit
在下面的示例中,我们将将默认编辑器设置为“ emacsclient”,并打开Pry#repl
方法进行编辑:
pry ( main ) > Pry . editor = "emacsclient"
pry ( main ) > edit Pry #repl
pry中还有许多其他命令;要在提示下查看完整列表类型的help
。提供每个命令的简短描述,上面有基本说明;某些命令具有更广泛的帮助,可以通过键入command_name --help
访问。如果可以使用--help
选项,则通常会在其描述中说命令。
您可以使用Pry的-r
标志在应用程序环境中运行pry控制台:
pry -r ./config/environment
或启动Rails控制台( bin/rails console
),然后键入pry
。
也可以通过将pry-rails宝石添加到您的gemfile中,将pry用作轨道控制台。除了加载导轨控制台助手并添加一些有用的轨道特定命令外,这还用PRY替换了默认控制台。
请注意,目前尚未维护pry-rails
。
另外,请查看Wiki,以获取有关将PRY与Rails集成的更多信息。
默认情况下,语法突出显示在pry中。如果您想更改颜色,请查看pry-theme宝石。
您可以使用toggle-color
命令在会话中打开和关闭语法突出显示。另外,您可以通过将行pryrc
Pry.color = false
将其永久关闭。
如果您有问题,问题或错误报告,请随时进行:
该项目使用MIT许可证。有关详细信息,请参见License.MD。
Pry主要是John Mair(Banisterfiend)的作品,有关贡献者的完整列表,请参见贡献者图。