Ошибка: Попытайтесь назвать закрытый метод

Ваш 2-й пример немного более эффективен, потому что делегат "метода" экземпляр не должен быть получен в закрытии. Я сомневаюсь, что Вы когда-либо замечали бы.

23
задан Andrew Grimm 27 March 2012 в 23:21
поделиться

3 ответа

Не делайте

self.get_uri_from_path()

делайте

get_uri_from_path()

Потому что ...

  class AccessPrivate
    def a
    end
    private :a # a is private method

    def accessing_private
      a              # sure! 
      self.a         # nope! private methods cannot be called with an explicit receiver at all, even if that receiver is "self"
      other_object.a # nope, a is private, you can't get it (but if it was protected, you could!)
    end
  end

через

46
ответ дан 29 November 2019 в 01:41
поделиться

Я считаю, что правильная идиома в этом случае - это не self.get_uri_from_path (), а просто get_uri_from_path (). Самость избыточна. Дополнительные примечания: * self.path вызывает метод пути для себя, который предположительно определен в родительском классе. Если бы вы хотели получить прямой доступ к переменной экземпляра, вы могли бы указать @path. (@ - это знак для переменных экземпляра.) * Скобки для аргументов метода не обязательны, за исключением случаев, когда их отсутствие может вызвать двусмысленность. Если хотите, вы можете заменить get_uri_from_path () на get_uri_from_path. Это контрастирует с Javascript, где функция без скобок представляет эту функцию как значение, а не приложение этой функции.

1
ответ дан 29 November 2019 в 01:41
поделиться

есть черт возьми, где вы можете вызвать частный метод в любой ситуации, а именно:

object.send(:private_method)

Я считаю, что 1.9 имеет другую реализацию этого трюка

1
ответ дан 29 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: