0

与我熟悉的 C# 开发中的代码完成相比,我发现 RubyMine 提供的代码完成非常不完整。

  1. 当我用一些方法编写一个类并且我想从另一个类调用它们时,
    为什么我会得到一个“一英里”长的代码完成列表,但其中没有相关的方法建议?
    (或者这是我的 RubyMine 中的错误/功能?!)

  2. 有些类像ActionMailer 神奇地生成像“deliver_*”方法这样的方法(见这个例子)......因为我在代码完成中看不到它们,我怎么知道它们甚至存在?
    (不幸的是,我目前也遇到错误,该deliver_contact方法不存在......正如我从示例中完全复制的那样,我现在问自己这个功能是否仍然存在 8[)

他们有什么方法可以解决这些问题吗?

4

3 回答 3

5

并不是说 Ruby 没有“设计”用于代码完成,而是可以通过多种方式添加行为,包括在程序执行期间。这使得代码完成变得困难。RubyMine 做得很好,但仅适用于明显或已知的功能,当对象的类型已知时。

http://apidock.com提供了 Ruby、Rails 和 RSpec 的参考资料。在 irb/ pry中玩耍会很有帮助。您始终可以通过foo.methods在 REPL 中进行 eval-ing 来获取类/实例上的方法(尽管我几乎总是如此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各种方法),因此某些功能可能仍被隐藏。

于 2011-10-22T18:55:30.693 回答
0

您遇到这些问题的主要原因是 Ruby(onRails) 从未设计用于代码完成。大多数 Rubyist 代码都在文本编辑器中,并且很高兴他们不需要代码完成。

在当前版本的 Rails 中,deliver_* 方法被弃用,取而代之的是MyClass.contact.deliver风格。

于 2011-10-22T18:48:03.627 回答
0

遵循以下结构的所有方法:deliver_* 都使用元编程理念。

这是一个非常简单的例子:Ruby: define_method vs. def

你会发现 Rails 中的很多东西都与方法缺失和元编程理念有关。

于 2011-10-22T18:53:39.697 回答