有没有办法在Ruby方法中嵌入注释,可以通过irb或rails c输出

时间:2013-10-16 18:10:03

标签: ruby-on-rails ruby irb

有没有办法做这样的事情:

>Location.get_info 
......
>Location.get_info --help
outputs info on the location; lazily loads hours 

将输出嵌入为rdoc样式注释?我希望能够为我们的rails应用程序提供一组种子命令的快速文档

THX

2 个答案:

答案 0 :(得分:1)

你可以在红宝石中建造几乎所有东西......

我不认为那里有任何图书馆正在做你想要的。

根据您在帖子中添加的IRB标记进行猜测,您希望帮助人们使用您的代码。

在这种情况下,您可以告诉他们使用pry并使用show-doc功能

[2] pry(main)> show-doc User#url

From: /Users/paule/Documents/rails/on_ruby/app/models/user.rb @ line 39:
Owner: User
Visibility: public
Signature: url()
Number of lines: 1

generates a homepage url for a user

答案 1 :(得分:0)

方法不是对象,因此您不能在其中存储任何内容。

可以使用Object#method方法获取绑定方法的代理对象,使用Module#instance_method方法获取未绑定方法,但是,该代理对象是只是一个代理对象。特别是,当您要求时,不能保证始终获得相同的代理对象。

因此,如果您获取方法的代理对象,然后在其中存储一些文档,然后为同一方法获取另一个代理对象,这可能是一个不同的代理对象,其中没有您的文档。

示例:

class UnboundMethod
  attr_accessor :doc
end

map = Array.instance_method(:map)

map.doc = '`map` maps a block over all elements'

map_again = Array.instance_method(:map)

map_again.doc
# => nil

map.doc
# => '`map` maps a block over all elements'

map.object_id == map_again.object_id
# => false

因此,您无法将文档存储在方法中,因为方法不是对象,您无法将其存储在代理对象中,因为Ruby不保证这些代理对象的身份。

您需要将其存储在其他地方。也许在Module中定义方法,由方法名称索引。