По моему опыту, переменные с префиксом подчеркивания в Ruby очень похожи на переменные с префиксом подчеркивания в JavaScript: флаг "не трогать". Более конкретно, они используются, когда разработчик делает что-то, что на самом деле не должно восприниматься как часть объекта или не должно рассматриваться как концептуальный интерфейс объекта.
Это более ясно в мире JavaScript, где кто-то эмулирует «приватный», добавляя префикс к подчеркиванию. Они кодируют, что есть часть объекта, которая находится под капотом и может игнорироваться, если смотреть на объект снаружи.
В Ruby я действительно видел это только с такими вещами, как кеш или одноэлементный экземпляр - то, что должно быть невидимым для потребителей вашего объекта. Не подчеркнутые переменные - это то, что людям, использующим ваш объект, может быть интересно знать, что они там есть.
В любом случае, они кажутся довольно редкими, и я бы их избегал, если только вы не захотите отправить следующему парню сигнал о том, что происходит какая-то дополнительная магия или вуду.
Что касается различия между вызовами методов, если вы беспокоитесь о том, что может возникнуть путаница между методом и локальной переменной, я бы уточнил метод на self
. Например:
def foo
...
end
def some_method
foo # method
bar # variable
end
Если по какой-либо причине это кажется неясным, вы можете уточнить с помощью
def some_method
self.foo
bar
end