我应该如何以及为什么要避免在 Ruby 方法声明中使用 "self"

How and why should I avoid using "self" in a Ruby method declaration

我想知道在从另一个 class 调用函数时是否有最简单的方法来摆脱 "self"。 例如,我这里有一个具有功能的 class。

module Portfolio
    class Main < Sinatra::Base

        def self.create_user(username,password,confirm_pass,fullname)
            @creation_flag = false
            begin
                if password == confirm_pass
                    @creation_flag = User.create(username: username,password: password,full_name: fullname).valid?
                end
            rescue Exception => e
                puts 'Error Occured: '+e.message,""
            end
            return @creation_flag
        end

        def self.

    end
end

要使用它,我需要声明 self.create_user(params goes here) 有没有办法摆脱自我?

提前致谢。

使用 self 没有错,但它绕过了创建对象的变量实例的要求,因此一些顽固的 OO 程序员会出于这个原因建议避免使用 self。如果你避免 "self" 那么你将被迫初始化你的 class 并将它分配给一个变量名,这迫使你将它视为一个真正的对象,而不仅仅是函数的集合。

这里有一个示例 class 来演示如何在有和没有 "self"

的情况下调用方法
class StaticVersusObjectMethod

  def self.class_method
    puts 'Hello, static class method world!'
  end

  def object_method
    puts 'Hello, object-oriented world!'
  end

end

# No need to create an object instance variable if the method was defined with 'self'
StaticVersusObjectMethod.class_method

# You must create an object instance variable to call methods without 'self'
object = StaticVersusObjectMethod.new
object.object_method

输出:

Hello, static class method world!
Hello, object-oriented world!

是否在声明中使用 self 应取决于您希望方法使用的数据。如果这些方法 对您作为参数传入的变量进行操作,则使用 'self'。另一方面,如果您希望它们充当真正的对象方法,请不要使用 'self'。 "True" 对象方法可以对您创建的对象中 class 变量(字段)的状态进行操作,并分配给一个或多个变量名。