В чем разница между этими двумя функциями ruby?
Функция GetTitle при вызове из оболочки ruby выдает ошибку "Неинициализированная константа GetTitle"
Пока full_title работает нормально.
В чем проблема с GetTitle?
def GetTitle(pageTitle = '')
baseTitle = "Base Title"
if pageTitle.empty?
baseTitle
else
pageTitle + " | " + baseTitle
end
end
def full_title(page_title = '')
base_title = "Ruby on Rails Tutorial Sample App"
if page_title.empty?
base_title
else
page_title + " | " + base_title
end
end
1 ответ
Решение
В Ruby, согласно соглашению, константы начинаются с заглавной буквы. Поэтому, когда вы звоните GetTitle
он рассматривается как константа, и вы получаете соответствующую ошибку (поскольку такой константы нет). Однако если вы вызываете его с параметром, он будет работать. Это связано с наличием параметра, который Ruby интерпретирует как метод. Вот:
GetTitle
# NameError: uninitialized constant GetTitle
GetTitle('abc')
#=> "abc | Base Title"
Вы можете заставить Ruby верить в его метод, используя также пустые скобки:
GetTitle()
#=> "Base Title"