这两个ruby函数有什么区别?

Mud*_*eja 2 ruby irb

从ruby shell调用时函数GetTitle抛出错误 "未初始化的常量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
Run Code Online (Sandbox Code Playgroud)

shi*_*vam 5

在Ruby中,按照惯例,常量以大写字母开头.因此,当您将GetTitle其视为常量并且您得到适当的错误(因为没有这样的常量)时.但是,如果使用参数调用它,它将起作用.这是因为参数Ruby的存在将其解释为一种方法.这里:

GetTitle
# NameError: uninitialized constant GetTitle
GetTitle('abc')
#=> "abc | Base Title"
Run Code Online (Sandbox Code Playgroud)

您也可以通过使用空括号使Ruby相信它是一个方法:

GetTitle()
#=> "Base Title"
Run Code Online (Sandbox Code Playgroud)

这个答案解释得很漂亮.