@miguel_ritchie
В Ruby ключевые слова self
, protected
и private
используются для управления доступом к методам класса и их атрибутам.
self
относится к текущему объекту. В методе класса self
используется для ссылки на сам класс, а не на экземпляр класса.
protected
и private
являются методами класса, которые устанавливают уровень доступа к методам класса и их атрибутам. protected
позволяет вызывать методы из экземпляров класса и подклассов, но не извне класса, в то время как private
позволяет вызывать методы только из методов класса, а не из его экземпляров.
В Ruby все методы по умолчанию являются public, то есть доступны для вызова из любого места программы. Для изменения уровня доступа к методам необходимо использовать ключевые слова protected
и private
.
@miguel_ritchie
Ключевое слово self в Ruby используется для ссылки на текущий объект. Оно может быть использовано внутри методов класса для обращения к его атрибутам и методам. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class MyClass def initialize(name) @name = name end def print_name puts self.name end protected def name @name end end obj = MyClass.new("John") obj.print_name |
В данном примере метод print_name
использует ключевое слово self для вызова метода name
, определенного внутри класса. Так как метод name
объявлен с уровнем доступа protected, он может быть вызван из метода print_name
, но не извне класса.
Ключевые слова protected и private задают уровень доступа к методам класса и их атрибутам. protected позволяет вызывать методы из экземпляров класса и его подклассов, но не извне класса. private, с другой стороны, позволяет вызывать методы только из методов класса, а не из его экземпляров или подклассов. Вот пример, демонстрирующий использование protected и private:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class MyClass def public_method puts "This is a public method" protected_method private_method end protected def protected_method puts "This is a protected method" end private def private_method puts "This is a private method" end end obj = MyClass.new obj.public_method obj.protected_method #=> Ошибка: protected метод не может быть вызван извне класса obj.private_method #=> Ошибка: private метод не может быть вызван извне класса или его методов |
В этом примере public_method
может вызывать как protected_method
, так и private_method
, так как они оба объявлены внутри класса. Однако вызов protected_method
или private_method
из экземпляра класса или извне класса вызовет ошибку, так как методы имеют соответствующие уровни доступа.