当我运行一个简单的方法时,我得到了以下错误,该方法接收了一个专有名词字符串并返回了正确大写的字符串。
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"
上述代码返回空白输出的唯一可能是由于你的 arr
是 nil
或 blank
. 而你的原因 arr
是空白的(是的,在你的例子中是空白的),因为这行代码。
if part[0].upcase
语句总是返回 true
因为每一次迭代都会检查 part
字符串 upcase
d或不,这是 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
.