Protected - visibilidade

Alguem pode dizer porque da erro de visibilidade nas linhas 19 e 21?
Se eu mudar para public funciona.

[code]
class Pai
def initialize(valor)
@valor = valor
end
def valor
@valor
end
def valor=(novo_valor)
@valor = novo_valor
end
protected :valor
end

class Filha < Pai
def initialize(valor)
@valor = valor
end
pai = Pai::new(10)
puts pai.valor
pai.valor=(20)
puts pai.valor
end[/code]

Pensando um pouco melhor no erro e refletindo cheguei a uma conclusão mas não sei se está correto. Os métodos gettrs e settrs em Java são sempre publicos para prover um encapsulamento e manter as variáveis de classe protegidas. O motivo de ta dando erro é porque marquei ela como protected ou isso não influencia no erro?

Em Java (acredito que em qualquer linguagem) você pode até marcar os métodos getters e setters como private se quiser, que não vai dar erro, não teria porque dar!

Agora eu não conheço nada dessa linguagem (python?) que você está usando então não posso ajudar.

[quote=dm_thiago]Em Java (acredito que em qualquer linguagem) você pode até marcar os métodos getters e setters como private se quiser, que não vai dar erro, não teria porque dar!

Agora eu não conheço nada dessa linguagem (python?) que você está usando então não posso ajudar.[/quote]

humm ok, mas a linguagem é Ruby. De qualquer forma fico grato.

Alguém mais?

Protected e private são diferentes por aqui.
Dá uma olhada nisso: http://faq.rubygarden.org/entry/show/57?controller_prefix=faq%2F

A sua idéia é colocar o bloco:

pai = Pai::new(10)  
puts pai.valor  
pai.valor=(20)  
puts pai.valor

Pra ser executado na classe Filha? Se esse bloco estiver dentro de um método de instância da classe Filha será executado sem problemas.