语法错误,意外的tIDENTIFIER,期待')' Ruby。

问题描述 投票:-1回答:1

当我运行一个简单的方法时,我得到了以下错误,该方法接收了一个专有名词字符串并返回了正确大写的字符串。

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

测试案例: puts format_name("chase WILSON") # => "Chase Wilson "put format_name("Brian CrAwFoRd scoTT") # => "Brian Crawford Scott"

ruby ruby-on-rails-3
1个回答
2
投票

上述代码返回空白输出的唯一可能是由于你的 arrnilblank. 而你的原因 arr 是空白的(是的,在你的例子中是空白的),因为这行代码。

if part[0].upcase

语句总是返回 true因为每一次迭代都会检查 part 字符串 upcased或不,这是 true.

因此,你的 else 块永远不会被执行,即使这个被执行,也会返回与输入相同的字符串,因为你只是把普通的 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 Classes概念的文章,把它放到... String 一类 ruby

另外,请查看 camelize 方法,如果你使用的是 rails.

© www.soinside.com 2019 - 2024. All rights reserved.