Мне потребовалось некоторое время, чтобы понять, как работают частные методы в 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
- Поведение Ruby на строках (1), (2) и (5) представляется разумным.
- Тот факт, что (6) в порядке, немного странный, особенно из Java и С++. Хорошая причина для этого?
- Я действительно не понимаю, почему (3) терпит неудачу! Объяснение, кто-нибудь?
- Проблема в строке (4) выглядит как двусмысленность в грамматике, которая не имеет ничего общего с 'private'.
Любые идеи?