加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – instance_eval和class << self之间的区别?

发布时间:2020-12-17 03:45:05 所属栏目:百科 来源:网络整理
导读:我似乎无法掌握这两个“结构”之间的确切差异.在我看来,以下小脚本应该输出相同的东西三次: class Example puts self class self puts self end instance_eval do puts self endend 但是,输出是: Example#Class:ExampleExample 这是我的理由: 示例是Class
我似乎无法掌握这两个“结构”之间的确切差异.在我看来,以下小脚本应该输出相同的东西三次:

class Example
  puts self

  class << self
    puts self
  end

  instance_eval do
    puts self
  end
end

但是,输出是:

Example
#<Class:Example>
Example

这是我的理由:

>示例是Class的一个实例,所以类body中的self指的是;
> class<< obj将self设置为给定块中的obj,在我的例子中是Class的实例(这是我可能错的地方);
> instance_eval在给定的实例中运行块,因此,在我的情况下,它几乎与将块中的代码直接放在类体中相同.

我目前的猜测是该等级<< self在Example和Class之间插入一个ghost类,并将self设置为,但是#< Class:Example>的输出.根本没有确认.

那么我的理由是什么问题?

解决方法

class << obj sets self to whatever obj is in the given block,which in my case is the instance of Class that is Example (this is where I’m probably wrong);

不,类<< obj打开了obj的单例类.正如你正确指出的那样,在类声明中,self指的是类本身,在这种情况下,“inner”self(即传递给puts的那个)引用Example的singleton类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读