2011-10-22 19 views
0

與我從C#開發中熟悉的代碼完成相比,我發現RubyMine提供的代碼完成出人意料地不完整。RubyMine中的Ruby和Rails代碼完成問題

  1. 當我寫了一些方法的類,我想從另一個類調用它們,
    爲什麼我得到一個代碼完成列表就像是「一英里」長,但沒有相關的方法 - 在它的建議?
    (或者是我的RubyMine?這是個Bug /功能)

  2. 一些類,如ActionMailer神奇產生這樣的方法「deliver_ *」的方法(見本example)......因爲我不在代碼完成中看到他們,我怎麼知道他們甚至存在?
    (不幸的是我此刻也得到一個錯誤,那deliver_contact方法不存在......當我完全從例如複製我問自己,現在wheter此功能仍然存在8)

他們是任何解決這些問題的方法?

回答

5

這並不是說Ruby不是用於「代碼完成」的「設計」,而是可以通過各種方式添加行爲,包括在程序執行過程中。這使代碼完成。 RubyMine做得很好,但只有在知道某個對象的類型時,才具有明顯或已知的功能。

http://apidock.com爲Ruby,Rails和RSpec提供了參考資料。在irb/pry中玩耍可以提供很多幫助。通過在REPL中評估foo.methods,您總是可以獲得課程/實例的方法(儘管我幾乎總是foo.methods.sort)。

如果您使用find/grep知道您要查找的內容,可以過濾該列表,例如,

> "foo".class.instance_methods(false).sort.grep /each/ 
=> [:each_byte, :each_char, :each_codepoint, :each_line] 

在Rails環境,運行rails console(我更喜歡使用撬的控制檯,情況因人而異),您可以訪問到你的環境,包括暴露了很多的動態方法。請注意,某些方法只有在首次調用時纔會存在(特別是那些find_by_foo_and_bar變體),因此某些功能可能會隱藏

+0

事實是,Ruby/Rails核心團隊中的大多數編碼人員只使用文本編輯器。 –

+5

@JakubHampl那麼?並不意味着它是最有效率的事情(不是這樣),或者每個人都這樣做,或者你不能同時使用兩者(我都使用)。 –

+1

戴夫我總是喜歡你的貼子,並喜歡這個。是的,我使用多個操作系統(MAC/Win/U)以及許多編輯器和IDE。 –

0

你得到這些問題的主要原因是Ruby(onRails)從來沒有被設計用於代碼完成。大多數Rubyist代碼在文本編輯器中,並且非常高興他們不需要代碼完成。

在當前版本的Rails中,deliver_ *方法已被棄用,以支持MyClass.contact.deliver樣式。

+0

好的,謝謝你的提示,但它並沒有真正回答我的問題。你怎麼「知道」一堂課的方法......或者你是否在互聯網上閱讀它? ^^ – David

+1

你會發現自己很多人都在閱讀源文件,或者文檔可用時。當然風格各不相同,但許多Ruby庫在很大程度上依賴於元編程和動態編寫的方法。這些技術根本不適合自動完成。 – numbers1311407

+0

@大衛戴夫回答得非常好。在你有了Rails的一些經驗之後,你經常會猜測:) apidock是一個很棒的站點,我一直都在使用它。 –

0

遵循以下結構的所有方法:deliver_ *正在使用元編程理念。

這裏是一個非常簡單的例子:Ruby: define_method vs. def

你會發現,在軌很多東西與方法缺失和元編程理念,以做。