2014-10-28 150 views
0

我在写一个方法来将一个字符串和整数数组合成一个句子。它必须大写第一个字母,在单词之间加上空格,并在最后放置一段时间。以下是我写的:将一串字符串组合成一个句子的重构方法

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

下面是一个阵列的一个例子,将获得通过:

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

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

+4

这个问题似乎是题外话,因为它是关于重构的,应该在[codereview.se]上提问。 – 2014-10-28 21:58:00

回答

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." 
+0

你是如何得到数组最后一个值的时间的? – theartofbeing 2014-10-28 20:11:06

+0

对不起,我发布这个答案时测试了一些代码。 – Surya 2014-10-28 20:13:25

1

你可以让你的代码一大堆可读:

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

我在期间之前没有看到空格。在这里使用Ruby 2.0。 – daremkd 2014-10-28 20:34:13

+0

@daremkd:假设最后一个值是:''miles“'而不是''miles”',那么在连接''。'之前,您必须删除该空格。 – Surya 2014-10-28 20:36:54