Есть ли веские причины для того, чтобы «private» работал так же, как в Ruby?
Мне понадобилось время, чтобы понять, какчастный методы работают в Ruby, и это действительно кажется мне очень неловким. Кто-нибудь знает, есть ли веские основания для того, чтобы частные методы обрабатывались такими, какие они есть? Это просто исторические причины? Или причины реализации? Или есть хорошие веские логические причины (т.е. семантические)?
Например:
class Person
private
attr_reader :weight
end
class Spy < Person
private
attr_accessor :code
public
def test
code #(1) OK: you can call a private method in self
Spy.new.code #(2) ERROR: cannot call a private method on any other object
self.code #(3) ERROR!!! cannot call a private method explicitly on 'self'
code="xyz" #(4) Ok, it runs, but it actually creates a local variable!!!
self.code="z" #(5) OK! This is the only case where explicit 'self' is ok
weight #(6) OK! You can call a private method defined in a base class
end
end
Рубин'Поведение s на строках (1), (2) и (5) представляется разумным.То, что (6) в порядке, немного странно, особенно в Java и C ++. Есть веская причина для этого?Я действительно не понимаю, почему (3) не удается! Кто-нибудь объяснение?Проблема в строке (4) выглядит как двусмысленность в грамматике, которая не имеет ничего общего с 'частный'.Есть идеи? Я