将字符串数组合成句子的重构方法

时间:2014-10-28 20:03:05

标签: ruby arrays refactoring

我正在编写一个方法将字符串和整数数组合成一个句子。它必须大写第一个字母,在单词之间添加空格,并在句末加上句号。这是我写它的方式:

def sentence_maker(y)
  y[0].capitalize!
  y[-1]="#{y[-1]}."
  sentence = y.join(" ")
end

这是一个可以传递的数组示例:

["alaska", "has", "over", 586, "thousand", "miles"]

这种方法的重构是什么? 在此先感谢您的帮助。 Ruby 2.1.1p76

2 个答案:

答案 0 :(得分:2)

为什么不呢?:

words = ["alaska", "has", "over", 586, "thousand", "miles"]
words.join(' ').strip.capitalize << '.' #=> "Alaska has over 586 thousand miles."

或使用字符串插值:

"#{words.join(' ').strip.capitalize}." #=> "Alaska has over 586 thousand miles."

strip将删除字符串中的前导/尾随空格(如果数组的第一个或最后一个值中有任何值)。

UPDATE :您可以将其包装为数组的实例方法:

class Array
  def to_sentence
    "#{join(' ').strip.capitalize}."
  end
end

words = ["alaska", "has", "over", 586, "thousand", "miles"]
words.to_sentence # => "Alaska has over 586 thousand miles."

答案 1 :(得分:1)

您可以使您的代码更具可读性:

def sentence_maker(array)
  array.first.capitalize!
  array.last.concat('.')
  array.join(' ')
end