Ruby类方法在类方法中调用与否之间是否有区别?

前端之家收集整理的这篇文章主要介绍了Ruby类方法在类方法中调用与否之间是否有区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点好奇地知道,下面两种方法之间有什么区别吗?

使用自我调用方法

  1. class Test
  2. def self.foo
  3. puts 'Welcome to ruby'
  4. end
  5.  
  6. def self.bar
  7. self.foo
  8. end
  9.  
  10. end

Test.bar#欢迎来到ruby
>调用class方法,在class方法中没有self

  1. class Test
  2. def self.foo
  3. puts 'Welcome to ruby'
  4. end
  5.  
  6. def self.bar
  7. foo
  8. end
  9.  
  10. end

Test.bar#欢迎来到ruby

解决方法

是的,有区别.但不是在你的例子.但是如果foo是一个私有类方法,那么你的第一个版本会引发一个异常,因为你使用一个显式的接收器来调用foo:
  1. class Test
  2. def self.foo
  3. puts 'Welcome to ruby'
  4. end
  5. private_class_method :foo
  6.  
  7. def self.bar
  8. self.foo
  9. end
  10. end
  11.  
  12. Test.bar
  13. #=> NoMethodError: private method `foo' called for Test:Class

但第二个版本仍然可以工作:

  1. class Test
  2. def self.foo
  3. puts 'Welcome to ruby'
  4. end
  5. private_class_method :foo
  6.  
  7. def self.bar
  8. foo
  9. end
  10. end
  11.  
  12. Test.bar
  13. #=> "Welcome to ruby"

猜你在找的Ruby相关文章