`
wtb
  • 浏览: 106457 次
  • 性别: 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方法的说明看起来也并不那么“正确”了。可能也是没办法中的办法吧。
分享到:
评论

相关推荐

    Node.js-private-class保护类私有属性的一个模块

    `private-class`模块就是为了填补这一空白,它是一个用于Node.js环境中的工具,旨在帮助开发者创建具有私有属性和方法的类。本文将详细讲解如何利用`private-class`模块来实现类的私有化,以及其背后的原理和应用...

    Private Shell

    Private Shell的一个显著特点是对SFTP(Secure File Transfer Protocol)的内置支持,允许用户在本地和远程文件系统之间安全地进行文件传输。用户界面直观,操作流程类似于Windows资源管理器,使得文件管理更为便捷...

    PRIVATE

    "PRIVATE"这一主题可能涉及一个私有的字体库或者关于字体设计的专属项目,这使得它在专业领域内具有一定的独特性和保密性。下面我们将深入探讨字体设计的基本原理、常用字体类型及其应用,以及在不同场景下的选择...

    Private Shell.rar

    10. **日志记录**:为了方便排查问题和审计,Private Shell提供了日志记录功能,可以记录所有会话的活动。 11. **插件扩展**:Private Shell支持第三方插件,可以拓展更多功能,如脚本执行、自动脚本录制等。 12. ...

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

    以下是一个简单的例子: ```java class MyClass { private int myPrivateVar = 10; public void printPrivate() { System.out.println(myPrivateVar); } } class TestClass { public static void main...

    clk-private.rar_V2

    标题 "clk-private.rar_V2" 暗示我们正在处理一个与Linux内核时钟机制相关的更新版本,可能是针对Linux内核2.13.6的私有或平台特定的时钟实现。描述中提到的 "Basic clock implementations common to many platforms...

    Ubuntu Private tools

    "Ubuntu Private Tools" 是一个专为Ubuntu 10及以上版本设计的私有工具集合,它包含了一系列实用的小程序,旨在帮助用户进行个性化备份和其他系统管理任务。这些工具可能包括自定义脚本、配置文件以及一些特定功能的...

    java private data

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

    Altium Private License Server 14.0.0.34

    Altium Private License Server 14.0.0.34 是一个专为Altium Designer软件提供的私有许可服务器系统。这个版本的服务器主要用于管理和分配Altium Designer的许可证,确保企业或团队可以有效地利用其设计资源。Altium...

    PrivateTest_model

    标题 "PrivateTest_model" 暗示我们正在讨论一个私有测试模型,它与人工智能领域的人脸表情分类有关。这个模型可能是一个专为特定目的设计的深度学习模型,基于TensorFlow框架,由Google官方提供。TensorFlow是谷歌...

    private 代码

    4. **数据压缩与打包**:在处理多个文件时,使用压缩工具(如7-Zip、WinRAR)将文件打包成一个压缩包可以节省存储空间,方便传输。在编程中,有时也会用到归档和压缩库,例如Python的`zipfile`和`gzip`模块。 5. **...

    Private.BlurClear

    值得注意的是,Private.BlurClear.exe是这个工具的执行文件,用户只需要下载并运行这个文件,按照提示操作即可实现上述功能。然而,使用任何第三方工具修改系统设置都需要谨慎,确保了解其可能带来的影响,例如性能...

    Private_Shell_Scripts

    在【Private_Shell_Scripts】这个压缩包中,每个示例脚本可能涵盖了以上的一个或多个知识点,通过分析和运行这些脚本,我们可以加深对Shell编程的理解,提升日常工作中自动化任务的处理能力。同时,也可以借鉴这些...

    ios_private.db.zip

    总结来说,"ios_private.db.zip" 是一个用于检测iOS应用私有API使用的工具,通过解析和比对数据库中的信息,开发者可以找出并修复可能存在的问题,从而符合App Store的审核规范。在iOS开发过程中,了解和遵守这些...

    华为应用签名(Unable to export or encrypt the private key)

    该工具的主要功能是生成一个加密的私钥,这个私钥可以用于对APK进行签名,同时保证私钥的安全性。当开发者尝试使用PEPK工具时,如果出现“无法导出或加密私键”的错误,可能的原因有多种: 1. **权限问题**:确保你...

    oracle_private

    - **概述**:SQL\*Plus是Oracle数据库的一个命令行工具,用于执行SQL语句、脚本和管理任务。 - **启动SQL\*Plus**: - **使用URL方法连接**:通过URL格式(如`jdbc:oracle:thin:@//<host>:<port>/<service_name>`)...

    IOS private-api

    在越狱环境中,Cydia Substrate(旧称MobileSubstrate)是一个重要的框架,它允许开发者插入代码到其他应用的运行时环境中,以便在特定的函数调用前后执行自定义逻辑,这常用于利用Private API。 4. **符号混淆**:...

    private-office_0gmwd5_steal_private_

    标题 "private-office_0gmwd5_steal_private_" 暗示这可能是一个与私人办公室相关的项目,其中可能包含了某种可以获取或窃取私人信息的功能。描述提到它使用PHP编程语言实现,说明这是一个基于Web的项目,可能涉及到...

    Private Sub Commandl_Click()

    - **类型声明**: `Dim i As Integer`声明了一个整型变量`i`。 **运行结果**: - 循环将从5开始,递减0.8直到1。由于步长为负数,因此循环将反向进行。 - 输出结果将包含`i`及其对应的整数值。 #### (2)单击命令...

    private-office_kt4met_steal_private_

    【标题】"private-office_kt4met_steal_private_" 暗示了这是一个与私人办公室相关的项目,可能涉及数据安全和隐私窃取的问题。在IT领域,"steal private"通常指的是非法获取或窃取个人或公司的私密信息。这个项目...

Global site tag (gtag.js) - Google Analytics