`
wtb
  • 浏览: 103559 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

private的一个问题

阅读更多
首先,要明白这几个ruby的原理
1、默认(包括你所用的定义方法)在顶层定义的都是private实例方法
2、private方法是不允许指明接收者的,其接收者只能是隐含的self

def x11
puts "in x11"
end

def x11=(t)
 puts t
end

x11
self.x11="ddd"
当前定义了两个方法,都是private的,可以puts self.private_methods.sort 看到
那为什么 x11可执行,self.x11不能执行了? 上面已有解释,调用对象所属类的实例方法是不能加self的,因为,ruby中的private很微秒,它与java等都不同。它是说:“它只能在当前对象的上下文中被调用——不可能直接访问其他对象的私有文法,即便它与调用者都属同一个类的对象”,加了self,表示调用self中的那个private方法,即便self还是指向自己,也被ruby理解为,调用了“别”的对象的私有方法
可为什么self.x11=就能执行了?因为,如果不加self, 那就等于执行 x11="ddd",这句实际上ruby优先作为给x11赋值定义变量来处理,因此为了明确表示是调用一个实例方法,所以用 self.x11="ddd",ruby又接受了这个使用方法。不知道是我的理解有误,还是ruby的灵活语法给自己带来了一个问题,它的关于private方法的说明看起来也并不那么“正确”了。可能也是没办法中的办法吧。
分享到:
评论

相关推荐

    private2private2private2

    //打开一个文件的副本,并且指定数据写回到原文件 book = Workbook.createWorkbook(new File(path + "excel\\调查报告_" + dateString + ".xls"), wb); String txrq = getStringGBK(request, "txrq"); // 填写...

    java private data

    本人用java开发的一个小程序,未完成。因出现问题求助,上传代码以供更好的得到解答。 下载后用Winrar解压,选择“解压到当前文件夹”,你会得到一个叫做“my_data”的文件夹,打开Eclipse,把这个文件夹作为...

    用java代码来解析private、public、default、protected的权限问题

    用java代码来解析private、public、default、protected的权限问题

    uap-studio65 依赖的private library 中加载问题

    uap-studio65 依赖的private library 中加载问题

    php类中private属性继承问题分析

    首先 这个题目就有点问题 因为private属性是不能被继承的

    mysql的完整数据库连接PHP类库

    简介: class mysql { public function __construct($db_host, $db_user, $db_pwd, $db_database, $conn, $coding... //发现错误是否立即终止,默认true,建议不启用,因为当有问题时用户什么也看不到是很苦恼的

    反射调用private方法实践(php、java)

    生成一个简单的被测试类,只有个private方法。 复制代码 代码如下: <?php/** * 崔小涣单测的基本模板。 * * @author cuihuan * @date 2015/11/12 22:15:31 * @version $Revision:1.0$ **/class MyClass {/** * ...

    啊啊八皇后问题java

    自己写的一个小程序,对于初学者很适合 1、定义一个皇后类 public class Queen{ private final int size ; //棋盘的大小,也表示皇后的数目 private int[] location; //皇后在棋盘上的每行上的列的位置 private ...

    细话Java:”失效”的private修饰符

     在Java中相信很多人都用过内部类,Java允许在一个类里面定义另一个类,类里面的类是内部类,也叫做嵌套类。一个简单的内部类实现可以如下  class OuterClass {  class InnerClass{  }  }  的问题和Java...

    private-npm-publish:防止意外 npm 发布范围包的命令行工具

    只是一个简单的工具: 检查范围包的有效性? 运行npm publish => 到您的私有注册表!安装 npm install -g private-npm-publish用法 $ private-npm-publish# == Check the package and `npm publish`测试 $ npm test...

    C++课程实验五代码大全.zip

    2、(1) 声明一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。 (2) 声明一个基类Base...

    PrivateShell-v3.7z 亲测可用

    private shell(简称pshell)是一个很方便的linux shell for windows客户端,绿色名安装,内部集成了sftp和tunnul,一个客户端解决所有问题。已绿化。

    oracle客户端连接服务器常见问题

    有实践过的,解决方法都是真的,oracle客户端连接服务器常见问题

    private-money-client

    私人理财关于Private Money是一个基于浏览器的应用程序,它使您可以导入,分类和导出您的... 如果您想做出贡献,请选择一个问题并进行讨论。 您也可以在Slack 上与我聊天。 松弛链接仅在有限的时间内有效。 该产品将于

    PrivateVariable:CA_私有变量

    私有变量CA_PrivateVariable 访问私有变量 虽然我们不能直接从类外部访问私有变量,但有一种方法可以解决这个问题。 我们可以定义一个返回私有变量值的公共方法。 说明 这里我们包含了上次类似的代码,但这里我们...

    java j2ee 课程设计报告

    • 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力,提高学生适应实际,实践编程的能力; • 熟练掌握JAVA语言中图形用户界面程序的编写; 大体了解怎样用...

    C++实验源代码

    4) 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?把age改为保护成员变量呢?编程试试看。 5)...

    Redmine Private Notes Plugin-crx插件

    Redmine Private Notes插件默认将问题页面上的私人笔记复选框设置为true,这在您的团队和您的客户都使用问题跟踪器时会很有帮助。 只需在扩展选项页面上设置您的Redmine实例URL,即可享受私密性。

    DBA优化数据库性能心得

    实际上如今的优化己经向优化等待(waits)转型了,实际中性能优化最根本的出现点也都集中在IO,这是影响性能最主要的方面,由系统中的等待去发现Oracle库中的不足、操作系统某些资源利用的不合理是一个比较好的办法,...

    构造函数定义为private或者protected的好处

    从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“内部”的其他函数可以调用之。而对于private的函数,只能被本类“内部”的其他函数...

Global site tag (gtag.js) - Google Analytics