走近Ruby的交互式解釋器irb
irb是一個交互式的Ruby解釋器,這意味著它不用處理文件,而是處理會話中所輸入的代碼。irb是一個很好的工具,可以用于測試Ruby代碼,同時也是一個學習Ruby的好工具。
在命令行中輸入irb,就可以開啟irb會話,irb將顯示以下提示符:
$?irb2.1.0?:001?>
正如之前所述,還可以使用--simple-prompt選項使irb輸出更為簡單明了:
$?irb?--simple-prompt>>
irb一旦啟動,便可以輸入Ruby命令。這里可以運行單次攝氏-華氏度轉換程序。在本例中,irb就像一個可裝入口袋的計算器:它能計算任何輸入并打印結果。因此不必使用print或者puts命令:
>>?100?*?9?/?5?+?32=>?212
如果想要知道一年有多少分鐘,就輸入適當的乘法計算表達式:
>>?365?*?24?*?60=>?525600
當然,irb也會處理輸入的Ruby指令。比如,將天數、小時數、分鐘數賦值給變量,然后將這些變量的值相乘,可以在irb中這樣做:
>>?days?=?365=>?365>>?hours?=?24=>?24>>?minutes?=?60=>?60>>?days?*?hours?*?minutes =>?525600
上面就是期望的計算結果。但是看一下上面條目的前3行,當輸入days = 365的時候,irb會相應輸出365,為什么?
表達式days = 365是一個賦值表達式:將值365賦給了名為days的變量。賦值表達式最重要的任務就是將值賦給變量,因此可以在之后使用該變量。但是賦值表達式(days = 365這一整行)也有一個值,賦值表達式的值就是它右邊的值。當irb發現任何表達式時,它就會輸出這個表達式的值。因此,當irb發現days = 365時,它就輸出365。這看起來有些輸出過度,這是因為其處在irb之中,與在irb中輸入2+2就看到了結果,而沒有顯式地使用print語句去打印結果是同樣的道理。
同樣,調用puts方法也有一個返回值,名為nil。假如在irb中輸入一個puts語句,irb將會嚴格地執行它,同時還會打印輸出puts的返回值。
$?irb?--simple-prompt >>?puts?"Hello"Hello =>?nil
這里有一種方法可以讓irb不再喋喋不休,即使用-noecho參數。下面展示它如何使用:
$?irb?--simple-prompt?--noecho>>?2?+?2>>?puts?"Hi"Hi
幸好有-noecho,附加的表達式不會回顯其結果了。puts命令確實被執行了(可以看到輸出"Hi"),但是puts的返回值(nil)被屏蔽了。
在irb中可能會卡在一個循環中,或者會話看起來像是失去響應(就好像是輸入了左雙引號而沒有輸入右雙引號,或者類似的代碼行)。重新回到控制的方法取決于系統本身,在最常見的系統中,使用Ctrl+C組合鍵可以達到這一目的。另一個方法是使用Ctrl+Z組合鍵。這是用戶的系統中直接作用于irb上,最優、最通用的中斷信息的方式。當然,如果任務被真的凍結,無響應,可以到進程或者任務管理器工具中終止irb進程。
要從irb中正常退出,輸入exit即可。在許多系統中,Ctrl+D組合鍵同樣適用。
偶然情況下,會遇到irb出現問題(那是說遇到致命錯誤然后結束進程),而大多數時候它會捕獲自己的錯誤,然后讓用戶繼續操作。
一旦掌握了使用irb的竅門并用于打印輸出一切的值,以及如何關閉它,就會發現irb是一個極為有用的工具(和玩具)。
ri和RDoc
Ruby的源代碼采用一種能自動生成文檔的方式進行標記,然后通過一些工具解析和顯示它們,這些工具是ri和RDoc。
最早由Dave Thomas編寫的ri(Ruby索引)和RDoc(Ruby文檔)是為Ruby程序提供文檔的關系很緊密的一對工具。ri是一個命令行工具,而RDoc體系中包含了命令行工具rdoc。ri和rdoc是獨立的程序,通過命令行來運行。(雖然用戶也可以使用Ruby程序內所提供的工具,但這里暫時不討論這方面的內容。)
RDoc是一個文檔系統。假如在程序文件(Ruby或者C)中使用規定的RDoc格式編寫了注釋,rdoc會掃描程序文件,并抽取這些注釋,智能地(通過注釋的內容進行索引)組織它們,最后創建出漂亮的格式化文檔。在Ruby源碼樹以及許多Ruby安裝目錄的Ruby文件中,在許多的源碼文件中可以看到RDoc標記,包括了Ruby文件和C語言文件。
ri與RDoc相互配合:它提供了一種方式用于查看RDoc萃取過和組織過的文檔信息。具體來說(雖然不是唯一的,除非用戶定制它),ri被用于組織和顯示從Ruby源文件而來的RDoc的信息。在完全安裝好Ruby的任何系統中,都可以使用一個簡單的命令行工具ri獲得關于Ruby語言的詳細信息。
例如,下面是請求關于string對象的upcase方法的信息的方法:
$?ri?String#upcase
顯示如下結果:
=?String#upcase(from?ruby?core) ------------------------------------------------------------------------------str.upcase?->?new_str ------------------------------------------------------------------------------Returns?a?copy?of?str?with?all?lowercase?letters?replaced?with?their uppercase?counterparts.?The?operation?is?locale?insensitive---only?characters``a''?to?``z''?are?affected.?Note:?case?replacement?is?effective?only?in ASCII?region. "hEllO".upcase?#=>?"HELLO"
在String和upcase中間的散列標記(#),用于在ri命令中表明查找的實例方法,并與類方法區分。要查詢類方法,可以使用分隔符::替換#。第3章將會講述實例方法和類方法的區分。這里的要點是通過命令去處理大量的文檔。
注意
默認情況下,運行ri會通過一個分頁器(如UNIX中的more命令)輸出結果。它會在輸出的末端暫停,直到用戶點擊空格或者其他按鍵才會展示下一屏的信息,或者當所有的信息顯示完畢就會完全退出。準確地說,在這個例子中,用戶必須按下的按鍵因操作系統和分頁器不同會有所變化。空格鍵、回車鍵、Esc鍵、Ctrl+C組合鍵、Ctrl+D組合鍵和Ctrl+Z組合鍵都是很好的選擇。如果想要使用ri而不進行分頁顯示,可以在命令行使用的時候加入-T開關(ri –Ttopic)。
本文節選自《Ruby程序員修煉之道(第2版)》
內容簡介
這是一本深受好評的書。它不僅是一本純Ruby的書,也不僅是一本純Rails的書,而是一本為Rails程序員“優化”過的Ruby書。
本書從Ruby編程語言的基礎開始一直講到動態特性,其中包含大量的真實代碼示例并附有詳細的注解,對日常使用Ruby進行編程中會遇到的每個知識點都進行了清晰的講解。本書的內容由淺入深,主要包含Ruby編程語言的語法、面向對象的特性、默認對象self、控制流技術、常用的內置類、正則表達式、I/O操作,最后用大量的篇幅講述了Ruby中最值得關注的動態特性。
本書不僅適合Ruby編程語言的初學者,也適合有經驗的開發者以及那些想要真正提升Ruby編程技術的愛好者閱讀和學習,具有極高的參考價值。
本文轉載自異步社區。
原文鏈接:https://www.epubit.com/articleDetails?id=NC7E3EF91EAC000017FC017318DC0AE80
軟件開發 編程語言
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。