首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

Ruby之self详解(1)详细剖析

2012-11-06 
Ruby之self详解(一)详细剖析?简单来说,ruby中的self的含义,要看其上下文。???? self上下文???? Ruby的self

Ruby之self详解(一)详细剖析

?

简单来说,ruby中的self的含义,要看其上下文。

?

??? self上下文

???? Ruby的self有和Java的this相似之处,但又大不相同。Java的方法都是在实例方法中引用,所以this一般都是指向当前对象的。而Ruby的代码逐行执行,所以在不同的上下文(context)self就有了不同的含义,先来看看常见的context self都代表哪些

module M  extend self  def greeting    puts "hi"  endend


如果没有extend self,我们就无法使用M.greeting,
现在我们可以调用M.greeting了。
BTW:
module_function可以把module一个实例方法变成私有的,并复制一份放到其metaclass中。

?

?

参考:

http://ilstar.blogbus.com/logs/59782933.html

http://fuliang.iteye.com/blog/827443

?

1 楼 ruby_windy 2011-12-13   嗯,这个受限的终于弄清楚了,多谢.关于下面的表达,一点点疑问:


第一个问题,显式self不可以调用private(protected的也一样)方法,而隐式的可以 (这个原因我在下面解释) 。
原因是什么?
Ruby代码 
self.my_secret # => 显式 
#这一句的self在实例方法内,所以self指的是Person的一个实例,而实例是不能调用私有方法的(protected也如此) 
#注意,此时的self和我们new一个Person的实例没有本质区别。 

    第二个问题,self的方法不受private限制,其实我在这故意误导了读者,因为self的方法是类方法,而权限修饰符只对实例方法生效(下面解释) ,所以 private的类方法也可以直接访问。 // 这个意思是, private修饰的实例方法不受限,而类方法受限吧? 2 楼 fantaxy025025 2011-12-13   非常感谢!我此处写的是错误的。

显式的调用类的私有方法,也是不行的。

但类的内部(也就是说隐式的调用)是可以的。我补充了一点。
Person.method4 #fantaxy added here! #NoMethodError: private method `method4' called for Person:Class

Thanks! 3 楼 991142 2012-02-11   解决我的疑问!

热点排行