Jon*_*han 31 ruby reflection ruby-on-rails
我正在做一些反思,遇到意想不到的路障.
ruby(或rails)中是否有一个返回自身的对象方法
ruby-1.9.2> o = Object.new
=> #<Object:0x00000104750710>
ruby-1.9.2> o.class
=> Object
ruby-1.9.2> o.send :self
NoMethodError: undefined method `self' for #<Object:0x00000104750710>
Run Code Online (Sandbox Code Playgroud)
我想要的是
ruby-1.9.2> o.send :self
=> #<Object:0x00000104750710>
Run Code Online (Sandbox Code Playgroud)
这是内置的吗?或者我是否需要扩展Object(它总是让我紧张开放对象):
class Object
def itself
self
end
end
Run Code Online (Sandbox Code Playgroud)
然后:
ruby-1.9.2> o.send :itself
=> #<Object:0x00000104750710>
Run Code Online (Sandbox Code Playgroud)
好吧,关于我想要实现的一些背景知识.我在我的rails应用程序中有一个通用的表助手,如果是这样的话你会打电话:
render_list @person, [{field: :name, link_to: :itself},
{field: {address: :name}, link_to: :address}]
Run Code Online (Sandbox Code Playgroud)
我正在努力寻找合适的方式:itself- 但我认为我的补丁是要走的路.
Dav*_*son 41
是! 如果您使用Ruby 2.2.0或更高版本,则可以使用该Kernel#itself方法.
您可以在此处查看此功能的广泛讨论:https: //bugs.ruby-lang.org/issues/6373.补丁由RafaelFrança在#53号邮件中提交.
您可以通过查看object.c在官方Ruby源代码中看到它.
如果您使用的是Ruby版本> = 1.9,则可以使用tap带空块的方法:
Object.tap{} => Object
Object.new.tap{} => #<Object:0x5f41334>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9231 次 |
| 最近记录: |