关于self.my_method
与my_method
、self.private
与private
的两者之间各自的区别,求指点。
《Ruby 元编程》第二版,第 35 页。
主要问一下self.method
跟method
的不同之处,希望大神说的直白点
我有点理解了 2.2.1 :001 > class C 2.2.1 :002?> def public_method 2.2.1 :003?> self.private_method 2.2.1 :004?> end 2.2.1 :005?> private 2.2.1 :006?> def private_method 2.2.1 :007?> end 2.2.1 :008?> end => :private_method 2.2.1 :009 > C.new.public_method NoMethodError: private method `private_method' called for # C.new 调用 public_method 方法,所以 self.private_method 中的 self 就指的是 C.new,而不能明确指定接受者来调用私有方法,所以这样是错误的。 去掉 self,就成了通过隐性的接受者 self 调用了,就能通过了,是这个意思吗
Ruby 中 self 是 class 中一个具有 scope 的关键字,在 class 中不同的 scope 中其表明的意义也是不同的。位于 class 定义中的 self 都代表的 class 本身,位于 method 定义中的 self 代表的是 class 的 instance,但是这个前提是 method 定义不以 self.method_name 开始,若以 self.method_name 开始定义的话,method 定义中如果使用了 self,此 self 也是 class 本身。举一个例子:
class Game
def start_game
self.start_time = Time.zone.now
# Without implementation
end
def self.game_areas
# Without implementation
end
end
start_game 方法中得 self 指代的是 class Game 的 instance,而 game_areas 方法前面的 self 是在 class 中的 scope,self 指代的是 Game 本身,同时,如果 game_areas 方法中还有使用 self 关键字的话,self 同样指代的 Game 本身。