使用和不使用self的类方法调用Ruby类方法之间有什么区别吗?

Eng*_*mon 9 ruby

我有点好奇要知道,以下两种方法之间有什么区别吗?

  1. 使用self在类方法中调用类方法

    class Test
      def self.foo
       puts 'Welcome to ruby'
      end
    
     def self.bar
      self.foo
     end
    
    end
    
    Run Code Online (Sandbox Code Playgroud)

    Test.bar #欢迎来到红宝石

  2. 在没有self的类方法中调用类方法

    class Test
      def self.foo
       puts 'Welcome to ruby'
      end
    
     def self.bar
      foo
     end
    
    end
    
    Run Code Online (Sandbox Code Playgroud)

    Test.bar #欢迎来到红宝石

spi*_*ann 12

是,有一点不同.但不是在你的例子中.但是如果foo是一个private类方法,那么你的第一个版本会引发一个异常,因为你foo用一个明确的接收者调用:

class Test
  def self.foo
    puts 'Welcome to ruby'
  end
  private_class_method :foo

  def self.bar
    self.foo
  end
end

Test.bar
#=> NoMethodError: private method `foo' called for Test:Class
Run Code Online (Sandbox Code Playgroud)

但第二个版本仍然有效:

class Test
  def self.foo
    puts 'Welcome to ruby'
  end
  private_class_method :foo

  def self.bar
    foo
  end
end

Test.bar
#=> "Welcome to ruby"
Run Code Online (Sandbox Code Playgroud)