ruby - 在类方法中使用和不使用 self 调用 Ruby 类方法有什么区别吗?

标签 ruby

我有点好奇,下面这两种方法有什么区别吗?

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

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

    Test.bar # 欢迎使用 ruby​​

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

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

    Test.bar # 欢迎使用 ruby​​

最佳答案

是的,有区别。但不是在你的例子中。但是,如果 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

但第二个版本仍然有效:

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"

关于ruby - 在类方法中使用和不使用 self 调用 Ruby 类方法有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692457/

相关文章:

ruby-on-rails - 不能在前置模块中使用实例变量

ruby - 停止 ruby​​ 对象的初始化

ruby-on-rails - simple_form 我没有找到 citext 的输入

Ruby 正则表达式组替换

ruby - 了解 delayed_job 状态

方法的 ruby​​ 关键字参数

ruby-on-rails - 我们是否需要在用户注销后删除 session 变量?

mysql - ActiveRecord::StatementInvalid in UsersController#create (Insert 不包括新添加的列)

ruby-on-rails - 如何以及为什么要在 Rails 应用程序中实现 Oauth?

ruby - 检查 Ruby 数组中的所有项目是否唯一的快速方法