我应该如何以及为什么要避免在 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 变量(字段)的状态进行操作,并分配给一个或多个变量名。
我想知道在从另一个 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 变量(字段)的状态进行操作,并分配给一个或多个变量名。