首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回自身的Ruby方法

返回自身的Ruby方法
EN

Stack Overflow用户
提问于 2011-06-10 23:22:36
回答 7查看 11.8K关注 0票数 33

我正在做一些反思,遇到了一个意想不到的路障。

ruby (或)中是否有返回自身的对象方法

代码语言:javascript
复制
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>

我想要的

代码语言:javascript
复制
ruby-1.9.2> o.send :self
 => #<Object:0x00000104750710> 

这是内置的吗?或者我需要扩展Object (打开Object总是让我紧张):

代码语言:javascript
复制
class Object

  def itself
    self
  end

end

然后:

代码语言:javascript
复制
ruby-1.9.2> o.send :itself
 => #<Object:0x00000104750710> 

好的,关于我正在努力实现的一些背景知识。我在我的rails应用程序中有一个通用的表助手,如果是这样的话你可以调用:

代码语言:javascript
复制
  render_list @person, [{field: :name, link_to: :itself},
                        {field: {address: :name}, link_to: :address}]

我一直在为调用:itself的正确方式而苦苦挣扎--但我认为我的补丁是可行的。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-09-17 06:12:08

是!如果使用的是Ruby2.2.0或更高版本,则可以使用Kernel#itself方法。

你可以在这里看到对这个特性的广泛讨论:https://bugs.ruby-lang.org/issues/6373。补丁是由Rafael França在消息#53中提交的。

你可以在object.c的官方Ruby源码中找到它。

票数 48
EN

Stack Overflow用户

发布于 2012-07-11 06:34:11

有关于添加这样的方法的讨论:http://bugs.ruby-lang.org/issues/6373

票数 7
EN

Stack Overflow用户

发布于 2011-06-11 00:39:49

如果你使用的是Ruby1.9版本的>=,你可以使用带有空块的tap方法:

代码语言:javascript
复制
Object.tap{}     => Object
Object.new.tap{} => #<Object:0x5f41334>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6308470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档