簡體   English   中英

RubyMine中的Ruby和Rails代碼完成問題

[英]Ruby and Rails code completion issues in RubyMine

與我在C#開發中熟悉的代碼完成相比,我發現RubyMine提供的代碼完成令人驚訝地不完整。

  1. 當我用某些方法編寫一個類並想從另一個類中調用它們時,
    為什么我會得到一個長度為“一英里”的代碼完成列表,但其中沒有相關的方法建議?
    (或者這是我的RubyMine中的錯誤/功能嗎?!)

  2. 諸如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM