Czy istnieją powody, dla których „prywatny” działa tak, jak w Ruby?

Trochę mi zajęło zrozumienieprywatny metody działają w Ruby i naprawdę wydaje mi się, że jest bardzo niezręczna. Czy ktoś wie, czy istnieją dobre powody, aby prywatne metody były traktowane tak, jak są? Czy to tylko powody historyczne? Czy powody wdrożenia? A może istnieją dobre, logiczne powody (np. Semantyczne)?

Na przykład:

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
Zachowanie Ruby na liniach (1), (2) i (5) wydaje się rozsądne.Fakt, że (6) jest w porządku, jest nieco dziwny, zwłaszcza pochodzący z Java i C ++. Jakiś dobry powód?Naprawdę nie rozumiem dlaczego (3) zawodzi! Ktoś wyjaśnia?Problem w linii (4) wygląda jak dwuznaczność w gramatyce, która nie ma nic wspólnego z „prywatnym”.

Jakieś pomysły?

questionAnswers(1)

yourAnswerToTheQuestion