我正在通过LearnTocodethehardway.com http://ruby.learncodethehardway.org/book/ex25.html工作 在ex25。在该示例中,有一个模块具有一堆返回或打印值的方法。提供字符串数组时的Print_last_word方法只是nil。它甚至在他的示例输出中也是如此。我的问题是什么原因?
答案 0 :(得分:3)
准确地说,它不会放置 nil
- 它会放置最后一个单词而返回 nil
。这是示例输出:
>> Ex25.print_last_word(words)
wait. # <- this is the output
=> nil # <- this is the return value
puts
始终返回nil
。
<强>更新强>
print_first_word
似乎有一个错误:
module Ex25
def Ex25.print_first_word(words)
word = words.pop(0)
puts word
end
end
Ex25.print_first_word(["foo", "bar", "baz"])
#=> nil
这是因为["foo", "bar", "baz"].pop(0)
返回一个空数组而puts []
只返回nil
而不打印任何内容。
工作实现(在练习的风格中)可能如下所示:
module Ex25
def Ex25.print_first_word(words)
word = words.shift
puts word
end
end
答案 1 :(得分:0)
让它更容易理解:
&#34;放&#34;永远不会用于其返回值。它用于副作用,如果你想要一个可以返回一个单词的方法,你就可以用这个单词做一些事情。
words = ["apple", "cucumber", "apple"]
def give_me_first_word(array_of_words)
array_of_words.first
end
variable_to_be_used_later = give_me_first_word(words)
此函数将返回&#34; apple&#34;(在这种情况下,变量将被分配&#34; apple&#34;),但它不会向屏幕添加任何内容。然后,该值将用于另一个程序或函数。
如果你输入一个值,那么你就不需要将它返回给任何其他程序,因为它已经达到了它的目的。它实际上是直观的,因为如果puts也返回了值,它将做两件事。 &#34;的对应物放置&#34;会&#34;返回&#34;它只是返回值而不会将其显示在屏幕上。