我正在阅读红宝石-petter库珀和我在这部分的文章开头的几个小时:
hot_words = %w{test ruby}
my_string = "This is a test. Dull sentence here. Ruby is great. So is cake."
my_string.sentences.find_all do |s|
s.downcase.words.any? { |word| hot_words.include?(word) }
end
def self.best_sentence(sentences, desired_words)
ranked_sentences = sentences.sort_by do |s|
s.words.length – (s.downcase.words – desired_words).length
end
ranked_sentences.last
end上面的方法是通过处理每个句子从想要的单词列表中有多少个单词的差异来选出最重要的句子。最让我困惑的是s.words.length – (s.downcase.words – desired_words).length
“s.words.length”是指每个句子的长度吗?如果是这样的话,那么"s.downcase.words.length“呢?为什么他们不直接处理每个句子的desired_words长度和排序最长的一个。这些想法一直萦绕在我的脑海中,但我知道这一定是很简单的事情,但我就是无法通过。
非常感谢你的帮助。谢谢!
发布于 2015-02-27 04:26:08
这是我每天使用最多的一种技巧。这叫做“调试打印”。它包括用一组打印语句来修饰代码,这些语句输出您感兴趣的不同值。在这个具体的例子中,您可能希望输出以下内容:
def self.best_sentence(sentences, desired_words)
ranked_sentences = sentences.sort_by do |s|
puts "analyzing string: #{s}"
puts "words: #{s.words}"
puts "downcased words: #{s.downcase.words}"
puts "desired words: #{desired_words}"
puts "without desired words: #{s.downcase.words - desired_words}"
s.words.length – (s.downcase.words – desired_words).length
end
ranked_sentences.last
end然后您只需运行代码,并查看控制台或日志(无论什么标准输出)。
https://stackoverflow.com/questions/28757300
复制相似问题