2013-01-08 8 views
2

每當我意外地在IRB中鍵入錯誤的語法時,我永遠無法回頭修復它,並且它不斷給出新的命令行。如何返回並修復IRB中的語法?

例如:

1.9.3p194 :035> justin.find{|key,value|key=='phone_number 
1.9.3p194 :036> justin.find{|key,value|key=='phone_number'} 
1.9.3p194 :037> 
1.9.3p194 :038> 
1.9.3p194 :039> 

後我固定在我的語法的錯字上線看出:在實施例036,它​​不執行該方法。

+0

再次輸入什麼? –

+0

在這個例子中,你可以輸入'}'+ [enter],你應該很好走 – Mischa

+0

@Mishca我剛剛做了,但沒有執行find方法 –

回答

1

忽略Stack Overflow在此答案中的語法高亮顯示。這是誤導。

justin.find{|key,value|key=='phone_number 

包含一個多行字符串,這與phone_number開始的開始。既然你還沒有完成它 - 通過輸入第二個' -IRB禮貌地等待你完成字符串。進入

justin.find{|key,value|key=='phone_number'} 

爲第二行的結果完成你已經開始字符串,進入一個方法調用或局部變量phone_number,右後添加另一個字符串的開始時,從現在開始用}。在這一點上它IRB看到的代碼看起來像

justin.find{|key,value|key=="phone_number\njustin.find{|key,value|key=="phone_number'} 

這還沒有結束,因爲最後一個字符串沒有結束,所以更多的輸入IRB等待。

每個後續

justin.find{|key,value|key=='phone_number'} 

讓你留在這個循環。

Ruby不會打斷你,並告訴你有語法錯誤。原因是IRB按照每條線路運行,並且您還沒有技術上完成線路。的確,表達式中的字符串中有新的行字符,但代碼中沒有會導致表達式終止的換行符。

現在我希望你的問題的答案是顯而易見的。爲了得到IRB圈外進入

' 

¹每表達會更精確,但每行是這個答案的範圍令人滿意。

4

大家都指出了原因,沒有人回答這個問題。

使用Control + C結束錯誤的行。

沒有執行,當然,它有錯誤。

一旦你在一條新的線上,你可以使用向上鍵在歷史中搜索它來編輯它。

順便說,奇怪的是,你IRB不以任何方式,您的訂單尚未執行告知:

正如你看到的,我對特殊字符結束命令IRB提示(大概如果我有多個括號/報價,等等,那就點第一個:

irb(main):001:0> justin.find{|key,value|key=='phone_number 
irb(main):002:1' ^C 

    (Up Key) 

irb(main):002:0> justin.find{|key,value|key=='phone_number' 
irb(main):003:1> 

Windows版本(紅寶石1.9.3p327(2012年11月10日)[I386-的mingw32]我在工作了:() 但我確定我在Gentoo和Suse有類似的東西

編輯:

從右側的相關帖子。你可以得到一個更好的提示傳球一樣選擇

IRB --prompt INF-紅寶石

How do I get the "irb(main):001:0>" prompt instead of ">>"

-1

我也行號之後的撇號:

1.8.6 :200 > justin.find{|key,value|key=='phone_number 
1.8.6 :201'> 

看看你是否可以配置提示,以便您瞭解IRB在繼續聲明的情況下期待的內容。又見What is the class of "if/unless" etc