博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ruby中的顶层方法
阅读量:5161 次
发布时间:2019-06-13

本文共 906 字,大约阅读时间需要 3 分钟。

  在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内建的私有实例方法。因此也不能显示调用。

 

转载于:https://www.cnblogs.com/smallbottle/p/3872729.html

你可能感兴趣的文章
机器学习常见算法分类汇总
查看>>
Git——开启区分大小写
查看>>
使用jekyll在GitHub Pages上搭建个人博客【转】
查看>>
java之struts2的数据处理
查看>>
java之struts框架入门教程
查看>>
B. An express train to reveries(Round 418)
查看>>
不要逼孩子考100分
查看>>
Python(四)
查看>>
Symbols of String Pattern Matching
查看>>
如何判断一个人的能力
查看>>
【学习笔记】 狄利克雷与莫比乌斯
查看>>
关于 DataRow 中为 DataRowState.Deleted 状态的 字段列值取值方法
查看>>
724.Find Pivot Index
查看>>
小牛必会之—monkey
查看>>
python3.6.3安装步骤,适用linux centos系统
查看>>
没有终结点在侦听可以接受消息的*这通常是由于不正确的地址或者 SOAP操作导致的...
查看>>
HTML5---15.网络接口
查看>>
接收xml请求流并解析字符串的例子
查看>>
中文字符串分隔的注意问题
查看>>
zip打包是去掉路径
查看>>