@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 из экземпляра класса или извне класса вызовет ошибку, так как методы имеют соответствующие уровни доступа.