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方法的说明看起来也并不那么“正确”了。可能也是没办法中的办法吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值