Какая разница между private и protected?
чт, 02/08/2007 - 20:11 — spine
Private делает возможным вызывать метод только как функцию, то есть единственный допустимый объект-получатель сообщения - это self. Private метод можно вызывать только из класса, где он определен, либо из классов-наследников.
class Test
def func
return 99
end
def test(other)
p func
p other.func
end
end
t1 = Test.new
t2 = Test.new
def func
return 99
end
def test(other)
p func
p other.func
end
end
t1 = Test.new
t2 = Test.new
t1.test(t2) #=> 99
99
# Now make 'func' private
class Test
private :func
end
t1.test(t2) #=> 99
-:7:in `test': private method `func' called for #<Test:0x401b49dc> (NameError)
from -:22
Методы protected также могут вызываться из своего класса и классов-наследников, но их можно вызывать и как функции, и как методы с объектами-получателями сообщения. Например, следующий код:
def <=>(other)
age <=> other.age
end
age <=> other.age
end
скомпилируется, если age - protected, но не private. Эти свойства позволяют контролировать доступ к внутренностям класса.

Обсуждение
Срочно продаю квартиру бизнес уровня недорого
Продаю 4-х комнатную квартиру свободной планировки в доме бизнес класса по адресу ул. Б.Набережная д.9 в пяти минутах от м.Тушинская,
жил.пл. 157 кв.м, имеется 3 сан. узла, большая кухня не менее 15 м. Квартира расположена на первом этаже 22-ух этажного дома, 1-ый этаж находится на уровне 3-го этажа, дом стоит на охраняемой территории с подземной парковкой. Имеется парковка
на одно машино место. Цена 18600000 руб. без учета машино места. Продаю срочно без накруток и посредников! специально для ruby.inuse.ru тел: (962) 368-37-17 - Ольга