[英]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.