[英]Ruby and Rails code completion issues in RubyMine
與我在C#開發中熟悉的代碼完成相比,我發現RubyMine提供的代碼完成令人驚訝地不完整。
當我用某些方法編寫一個類並想從另一個類中調用它們時,
為什么我會得到一個長度為“一英里”的代碼完成列表,但其中沒有相關的方法建議?
(或者這是我的RubyMine中的錯誤/功能嗎?!)
諸如ActionMailer
類的某些類神奇地生成諸如“ deliver_ *”方法之類的方法(請參見本示例 )...由於在代碼完成中沒有看到它們,我怎么知道它們甚至存在?
(不幸的是,我現在也遇到錯誤,那個deliver_contact
方法不存在...正如我從示例中完全復制的那樣,現在我問自己,該功能是否仍然存在8 [)
他們有什么辦法解決這些問題?
這並不是說Ruby不是為代碼完成而“設計”的,而是可以以多種方式添加行為的,包括在程序執行期間。 這使代碼完成變得困難 。 RubyMine做得很好,但是僅當已知對象的類型時,它才具有明顯或已知的功能。
http://apidock.com提供了有關Ruby,Rails和RSpec的參考資料。 在irb / pry中玩耍會很有幫助。 您始終可以通過在REPL中評估foo.methods
來獲取類/實例上的方法(盡管我幾乎總是foo.methods.sort
)。
如果您“通過某種方式”知道要查找的內容,則可以過濾該列表,例如
> "foo".class.instance_methods(false).sort.grep /each/
=> [:each_byte, :each_char, :each_codepoint, :each_line]
在Rails環境中,運行rails console
(我更喜歡在控制台中使用pry,YMMV)使您可以訪問環境,包括公開許多動態方法。 請注意,某些方法直到第一次被調用才存在(特別是find_by_foo_and_bar
那些方法),因此某些功能可能仍被隱藏。
出現這些問題的主要原因是Ruby(onRails)從未設計成可用於代碼完成。 文本編輯器中的大多數Rubyist代碼都非常高興,因為它們不需要代碼完成。
在當前版本的Rails中,不推薦使用delivery_ *方法,而推薦使用MyClass.contact.deliver
樣式。
遵循以下結構的所有方法:delivery_ *均使用元編程原理。
這是一個非常簡單的示例: Ruby:define_method與def
您會發現,rails中的許多內容都與方法缺失和元編程哲學有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.