语法错误,意外的 tIDENTIFIER,需要 ')' Ruby

Syntax error, unexpected tIDENTIFIER, expecting ')' Ruby

当 运行 一个接受专有名词字符串和 returns 正确大写的字符串的简单方法时,我收到以下错误。

def format_name(str)
    parts = str.split
    arr = []
    parts.map do |part|
      if part[0].upcase
      else part[1..-1].downcase
      arr << part
      end
    end
 return arr.join(" ")
end

测试用例: 放 format_name("chase WILSON") # => "Chase Wilson" 放 format_name("brian CrAwFoRd scoTT") # => "Brian Crawford Scott"

上述代码 return 的唯一可能是空白输出是因为您的 arrnilblank。你的 arr 是空白的(是的,在你的情况下它是空白的)是因为这行代码:

if part[0].upcase

其中语句总是 return true,因为每次迭代都会检查 part 字符串的第一个元素是否可以是 upcased 或不是,这是 true.

因此,你的 else 块永远不会被执行,即使它被执行,这也会 returned 与输入相同的字符串,因为你只是把普通的 part进入数组 arr 而不进行任何格式化。

有一些方法可以让上面的代码正常工作。我会放两个案例:

# one where your map method could work
def format_name(str)
  parts = str.split
  arr = []
  arr = parts.map do |part|
    part.capitalize
  end
  return arr.join(" ")
end


# one where your loop code logic works
def format_name(str)
  parts = str.split
  arr = []
  parts.map do |part|
    arr << "#{part[0].upcase}#{part[1..-1].downcase}"
  end
  return arr.join(" ")
end

还有许多其他方法可以实现这一点。如果我只使用普通 ruby:

,我也会放我喜欢的那个
def format_name(str)
  str.split(' ').map(&:capitalize)
end

您还可以阅读更多有关 Open 类 概念的信息,以将其放入 ruby

String class

此外,如果您使用 rails,请检查 camelize 方法。