📅  最后修改于: 2023-12-03 15:04:56.962000             🧑  作者: Mango
在 Ruby 中,我们可以定义方法,并控制它们的可见性。这是一个非常强大的功能,可以帮助我们封装代码,防止使用者滥用方法,保证代码的正确性和安全性。在本文中,我们将讨论 Ruby 中的方法可见性,并探讨如何在程序中应用它。
方法可见性是指方法可以被哪些对象调用。在 Ruby 中,方法有三种可见性:public、protected 和 private。默认情况下,所有方法都是 public 可见性。但是,我们可以使用关键字 public、protected 和 private 来改变方法的可见性。
Public 可见性是默认的方法可见性。在 Ruby 中,public 方法可以被任何对象调用,包括外部对象和内部对象。
class MyClass
def public_method
puts "This is a public method."
end
end
my_object = MyClass.new
my_object.public_method # 输出 "This is a public method."
在上面的例子中,我们定义了一个 public 方法,可以被外部对象调用。
Protected 可见性意味着方法只能被其自身的类对象和其子类对象所调用。对于外部对象来说,protected 方法是不可见的。
class MyClass
def protected_method
puts "This is a protected method."
end
protected :protected_method
end
my_object = MyClass.new
my_object.protected_method # NoMethodError:protected method “protected_method” called for #<MyClass:0x007ffa7b05f870 @name=“Winnie”>
在上面的例子中,我们定义了一个 protected 方法,并指定它的可见性为 protected。由于 my_object 是一个外部对象,所以它无法调用 protected 方法。只有 MyClass 类或其子类的对象才可以调用它。
class MySubClass < MyClass
def call_protected_method(obj)
obj.protected_method
end
end
my_sub_object = MySubClass.new
my_sub_object.call_protected_method(my_object) # 输出 “This is a protected method.”
在上面的例子中,我们定义了 MySubClass 子类,并通过 call_protected_method 方法调用了父类对象的 protected 方法。
Private 可见性意味着方法只能由其自身的类对象调用,外部对象都不能调用。通常,我们使用 private 方法来实现封装。
class MyClass
def public_method
puts "This is a public method."
private_method
end
private
def private_method
puts "This is a private method."
end
end
my_object = MyClass.new
my_object.public_method # 输出 “This is a public method.”和“This is a private method.”
my_object.private_method # NoMethodError:private method “private_method” called for #<MyClass:0x007fbd108386d8>
在上面的例子中,我们定义了一个 private 方法,并通过 public 方法调用它。由于 private 可见性,外部对象无法调用它。因此,我们可以实现更有效的封装。
Ruby 中的方法可见性是一个非常强大的功能,可以帮助我们实现更好的封装,保证代码的各项要求。掌握 Ruby 中的方法可见性对于程序员来说是非常重要的。在实际程序开发中,我们应该根据需求灵活运用 public、protected 和 private 关键字。