def get_my_secret2 self.my_secret # => 显式

来源:互联网 发布:什么是数据库实例 编辑:程序博客网 时间:2024/06/09 19:36

显式self不可以调用private(protected的也一样)方法,而隐式的可以(这个原因我在下面解释) 。

原因是什么?

Ruby代码  
  1.  self.my_secret # => 显式   
  2. #这一句的self在实例方法内,所以self指的是Person的一个实例,而实例是不能调用私有方法的(protected也如此)   
  3. #注意,此时的self和我们new一个Person的实例没有本质区别。  


# encoding: utf-8class Person       public     def get_my_secret1       my_secret # => 隐式     end         def get_my_secret2       self.my_secret # => 显式     end      private     def my_secret       p 'something...'    end         def self.secret       p 'nothing'    end      class << Person       def method3         p 'method3'      end        private       def method4         p 'method4'      end    end    end    m = Person.new  #m.my_secret # => private method error    Person.secret # => nothing     Person.method3 #fantaxy added here!   #Person.method4 #fantaxy added here! #NoMethodError: private method `method4' called for Person:Class     m.get_my_secret1 # => something   m.get_my_secret2 # => private method error  =begin "nothing""method3""something..."class_Public.rb:10:in `get_my_secret2': private method `my_secret' called for #<Person:0xc46e60> (NoMethodError)        from class_Public.rb:43:in `<main>'请按任意键继续. . .=end