2013-11-15 3 views
2

Я думал, что при вызове частного метода было неприемлемо разместить явный приемник. Хорошо, я сделал это в Ruby 2.0, и я могу получить результаты:Вызов self.private_method в Ruby не выбрасывает ошибку?

class Test 
    def public_method 
    self.set_size=10 
    end 

    def return_size 
    @size 
    end 

    private 

    def set_size=(size) 
    @size = size 
    end 

end 

test = Test.new 
test.public_method 
p test.return_size 

Почему это?

+0

Почему вы думаете, что это неприемлемо? Это выглядит приемлемым для меня. – jaeheung

+0

Не то, что я думаю, это в документах: '' 'Частные методы нельзя вызывать с явным приемником - приемник всегда сам. Это означает, что частные методы можно вызывать только в контексте текущего объекта; вы не можете вызывать частные методы другого объекта. '' ' –

+0

@HommerSmith: И вы вызываете метод на себя ... нет ничего плохого в этом. – Linuxios

ответ

0

Вы правы, за исключением одной вещи ... сеттеры (def method=) могут быть вызваны явным приемником самостоятельно, чтобы вы могли позвонить частным сеттерам.

Таким образом, на самом деле, если вы собираетесь сделать это:

class Test 
    def public_method 
    self.say_hi 
    end 

    def return_size 
    @size 
    end 

    private 

    def say_hi 
    puts "oh hay there" 
    end 

end 
test = Test.new 
test.public_method 
test.return_size 

Было бы бросить private method say_hi called for..

2

Частные сеттеры могут быть вызваны с явным приемником self. На самом деле, они имеют называться с явным приемником, потому что иначе они не могли бы назвать в все, так как

foo = bar 

является присвоение локальной переменной, а не метод вызова.

+0

Я думаю, что необходимо пояснить, что 'set_size' - это метод. Один из способов - добавить «я»; другой - 'send (: set_size =, 10)', который не имеет явного приемника. –

Смежные вопросы