首页 > 代码库 > ruby中的顶层方法
ruby中的顶层方法
在ruby中写顶层函数的时候,总会有一个问题,self是谁,这些方法是谁的,是什么方法。
如下:
1 p self2 3 p self.class4 5 def talk6 p self7 end8 9 talk
输出main,Object,main
由此可见,在写顶层代码的时候,ruby自动提供了一个默认的self,它是Object类的实例对象,main。
那么这个方法talk是属于谁呢?虽然它当前的self是main。
通过特殊的规定(就是规定的。参考ruby for rails中文版153页),顶层方法是Object类的私有实例方法。
私有实例,意味着,不能显示调用。而每个对象所属的类都是Object的后代,因此每个对象都可以调用顶层方法,只是不能显示调用。
如下:
1 def talk 2 puts "hello world" 3 end 4 talk 5 6 obj = Object.new 7 8 9 def obj.method10 talk11 end12 obj.method13 14 obj.talk
输出是hello world, hello world,in `<main>‘: private method `talk‘ called for #<Object:0x1ee7768> (NoMethodError)
定义一个顶层方法talk,main作为接收者调用,合法。定义一个Object的对象obj,为obj建立一个单例方法method,在method中调用talk,也合法。这是因为在单例方法中self是obj,而obj是Object的一个实例,可以调用Object的实例方法(顶层方法是私有实例方法)。但是在外面直接调用talk方法则不行,因为talk是一个私有方法。如错误所说。
另外,puts ,print那些顶层方法,是kernel内建的私有实例方法。因此也不能显示调用。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。