打印

对《应用Rails进行敏捷web开发》中一段代码的疑惑

对《应用Rails进行敏捷web开发》中一段代码的疑惑

书中129页的一个代码段是这样

private
def self.hash_password(password)
  Digest::SHA1.hexdigest(password)
end


由于hash_password是类方法,这里使用private根本无效果。不知道是代码示例有问题还是有其他什么原因我没有理解到?
本帖最近评分记录
  • drive2me R币 +2 鼓励。 2008-3-11 20:51

TOP

引用:
原帖由 vincent 于 08/1/17 00:24 发表
书中129页的一个代码段是这样

private
def self.hash_password(password)
 Digest::SHA1.hexdigest(password)
end


由于hash_password是类方法,这里使用private根本无效果。不知道是代码示例有问题 ...
嗯,这里有点问题。而且涉及一个Ruby的小技巧:

>> class Foo
>>   private
>>   def self.say_hi
>>     puts 'hi'
>>     end
>>   end
=> nil
>> Foo.say_hi
hi
=> nil


其实private只能限制到实例方法。

所以要这样:

>> class Foo
>>   private_class_method
>>   def self.say_bye
>>     puts 'bye'
>>     end
>>   end
=> nil
>> Foo.say_bye
bye
=> nil
>> class Foo
>>   private_class_method :say_bye
>>   end
=> Foo
>> Foo.say_bye
NoMethodError: private method `say_bye' called for Foo:Class
        from (irb):24


使用private_class_method来限制类方法的外部访问。

LZ看书看得很细,值得学习。
本帖最近评分记录
  • drive2me R币 +2 谢谢。 2008-3-11 20:51
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

2008-11-21 02:30 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61