©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)的作品,有關貢獻者的完整列表,請參見貢獻者圖。