Ruby将命令放入返回nil的模块中

时间:2014-08-18 19:09:34

标签: ruby

我正在通过LearnTocodethehardway.com http://ruby.learncodethehardway.org/book/ex25.html工作 在ex25。在该示例中,有一个模块具有一堆返回或打印值的方法。提供字符串数组时的Print_last_word方法只是nil。它甚至在他的示例输出中也是如此。我的问题是什么原因?

2 个答案:

答案 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;它只是返回值而不会将其显示在屏幕上。