Ваш 2-й пример немного более эффективен, потому что делегат "метода" экземпляр не должен быть получен в закрытии. Я сомневаюсь, что Вы когда-либо замечали бы.
Не делайте
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
Я считаю, что правильная идиома в этом случае - это не self.get_uri_from_path (), а просто get_uri_from_path (). Самость избыточна. Дополнительные примечания: * self.path вызывает метод пути для себя, который предположительно определен в родительском классе. Если бы вы хотели получить прямой доступ к переменной экземпляра, вы могли бы указать @path. (@ - это знак для переменных экземпляра.) * Скобки для аргументов метода не обязательны, за исключением случаев, когда их отсутствие может вызвать двусмысленность. Если хотите, вы можете заменить get_uri_from_path () на get_uri_from_path. Это контрастирует с Javascript, где функция без скобок представляет эту функцию как значение, а не приложение этой функции.
есть черт возьми, где вы можете вызвать частный метод в любой ситуации, а именно:
object.send(:private_method)
Я считаю, что 1.9 имеет другую реализацию этого трюка