与我熟悉C#开发的代码完成相比,我发现RubyMine提供的代码完成程度令人惊讶地不完整。
当我用一些方法编写一个类,我想从另一个类调用它们时,
为什么我得到一个像“一英里”长的代码完成列表,但没有相关的方法建议呢?
(或者这是我的RubyMine中的错误/功能?!)
像ActionMailer
这样的某些类神奇地生成类似“deliver_ *”方法的方法(请参阅此example)...因为我没有看到它们在代码完成中我怎么知道它们甚至存在?
(不幸的是我此刻也遇到错误,deliver_contact
方法不存在......正如我完全从示例中复制过来问我自己现在这个特征仍然存在8 [)
他们是否有办法解决这些问题?
答案 0 :(得分:5)
并不是Ruby不是“设计”用于代码完成,而是可以通过各种方式添加行为,包括在程序执行期间。这使代码完成 hard 。 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
(我更喜欢使用pry作为控制台,YMMV)可以访问您的环境,包括暴露许多动态方法。请注意,某些方法在第一次调用之前不存在(特别是那些find_by_foo_and_bar
种类的方法)因此某些功能可能仍然被隐藏。
答案 1 :(得分:0)
您遇到这些问题的主要原因是Ruby(onRails)从未设计为与代码完成一起使用。大多数Rubyist代码都在文本编辑器中,并且非常高兴他们不需要代码完成。
在当前版本的Rails中,不推荐使用deliver_ *方法,而是赞成MyClass.contact.deliver
样式。
答案 2 :(得分:0)
遵循以下结构的所有方法:deliver_ *正在使用 元编程哲学。
以下是一个非常简单的示例:Ruby: define_method vs. def
你会发现rails中的很多东西都与方法缺失和元编程哲学有关。