В чем разница между этими двумя функциями 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"

Этот ответ объясняет это прекрасно.

Другие вопросы по тегам