Ruby 鲁比艰难的道路ex25

Ruby 鲁比艰难的道路ex25,ruby,Ruby,我正在努力。我获得此命令的预期结果: Ex25.print_first_word(words) # => All 但对于另一个命令,而不是预期的结果: Ex25.print_last_word(words) # => wait. 我收到以下错误消息: NoMethodError: undefined method `pop' for nil:NilClass from /Users/Me/Documents/RUBY/ex25.rb:18:in `print_last_word'

我正在努力。我获得此命令的预期结果:

Ex25.print_first_word(words)
# => All
但对于另一个命令,而不是预期的结果:

Ex25.print_last_word(words)
# => wait.
我收到以下错误消息:

NoMethodError: undefined method `pop' for nil:NilClass
from /Users/Me/Documents/RUBY/ex25.rb:18:in `print_last_word'
有人知道这是指什么吗

编辑:

这是我为练习25所做的:

module Ex25

    def Ex25.break_words(stuff)
        words = stuff.split(' ')
        return words
    end

        def Ex25.sort_words(words)
            return words.sort
        end

            def Ex25.print_first_word(words)
                word = words.shift
                puts word
            end

            def Ex25.print_last_word(words)
                word = word.pop
                puts word
            end

def Ex25.sort_sentence(sentence)
    words = Ex25.break_words(sentence)
    return Ex25.sort_words(words)
end


def Ex25.print_first_and_last(sentence)
    words = Ex25.break_words(sentence)
    Ex25.print_first_word(words)
    Ex25.print_last_word(words)
end

def Ex25.print_first_and_last_sorted(sentence)
    words = Ex25.sort_sentence(sentence)
    Ex25.print_first_word(words)
    Ex25.print_last_word(words)
end

end
这就是我在终端中输入的内容,以及相关的错误:

MiniBean:ruby me$ irb
2.2.0 :001 > require "./ex25.rb"
 => true 
2.2.0 :002 > sentence = "All good things come to those who wait."
 => "All good things come to those who wait." 
2.2.0 :003 > words = Ex25.break_words(sentence)
 => ["All", "good", "things", "come", "to", "those", "who", "wait."] 
2.2.0 :004 > words
 => ["All", "good", "things", "come", "to", "those", "who", "wait."] 
2.2.0 :005 > sorted_words = Ex25.sort_words(words)
 => ["All", "come", "good", "things", "those", "to", "wait.", "who"] 
2.2.0 :006 > sorted_words
 => ["All", "come", "good", "things", "those", "to", "wait.", "who"] 
2.2.0 :007 > Ex25.print_first_word(words)
All
 => nil 
2.2.0 :008 > Ex25.print_last_word(words)
NoMethodError: undefined method `pop' for nil:NilClass
    from /Users/me/Documents/RUBY/ex25.rb:18:in `print_last_word'
    from (irb):8
    from /Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'
2.2.0 :009 > words
 => ["good", "things", "come", "to", "those", "who", "wait."] 
2.2.0 :010 > Ex25.print_first_word(sorted_words)
All
 => nil 
2.2.0 :011 > Ex25.print_last_word(sorted_words)
NoMethodError: undefined method `pop' for nil:NilClass
    from /Users/me/Documents/RUBY/ex25.rb:18:in `print_last_word'
    from (irb):11
    from /Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'
2.2.0 :012 > sorted_words
 => ["come", "good", "things", "those", "to", "wait.", "who"] 
2.2.0 :013 > sorted_words = Ex25.sort_sentence(sentence)
 => ["All", "come", "good", "things", "those", "to", "wait.", "who"] 
2.2.0 :014 > sorted_words
 => ["All", "come", "good", "things", "those", "to", "wait.", "who"] 
2.2.0 :015 > Ex25.print_first_and_last(sentence)
All
NoMethodError: undefined method `pop' for nil:NilClass
    from /Users/me/Documents/RUBY/ex25.rb:18:in `print_last_word'
    from /Users/me/Documents/RUBY/ex25.rb:31:in `print_first_and_last'
    from (irb):15
    from /Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'
2.2.0 :016 > Ex25.print_first_and_last_sorted(sentence)
All
NoMethodError: undefined method `pop' for nil:NilClass
    from /Users/me/Documents/RUBY/ex25.rb:18:in `print_last_word'
    from /Users/me/Documents/RUBY/ex25.rb:37:in `print_first_and_last_sorted'
    from (irb):16
    from /Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'
2.2.0 :017 >
MiniBean:ruby me$irb
2.2.0:001>要求“/ex25.rb”
=>正确
2.2.0:002>句子=“等待的人会得到一切好的东西。”
=>“等待的人会得到一切美好的东西。”
2.2.0:003>单词=Ex25.断开单词(句子)
=>[“所有”、“好”、“事情”、“来”、“去”、“那些”、“谁”、“等等。”]
2.2.0:004>单词
=>[“所有”、“好”、“事情”、“来”、“去”、“那些”、“谁”、“等等。”]
2.2.0:005>排序单词=Ex25.排序单词(单词)
=>[“所有”、“来”、“好”、“事情”、“那些”、“去”、“等”、“谁”]
2.2.0:006>已排序的单词
=>[“所有”、“来”、“好”、“事情”、“那些”、“去”、“等”、“谁”]
2.2.0:007>Ex25.打印第一个单词(单词)
全部的
=>零
2.2.0:008>Ex25.打印最后一个单词(单词)
NoMethodError:未定义nil:NilClass的方法'pop'
from/Users/me/Documents/RUBY/ex25.rb:18:in'print\u last\u word'
来自(irb):8
from/Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in`'
2.2.0:009>单词
=>[“好”、“事”、“来”、“到”、“那些”、“谁”、“等等。”]
2.2.0:010>Ex25.打印第一个单词(已排序的单词)
全部的
=>零
2.2.0:011>Ex25.打印最后一个单词(已排序的单词)
NoMethodError:未定义nil:NilClass的方法'pop'
from/Users/me/Documents/RUBY/ex25.rb:18:in'print\u last\u word'
来自(irb):11
from/Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in`'
2.2.0:012>已排序的单词
=>[“来”、“好”、“事情”、“那些”、“去”、“等”、“谁”]
2.2.0:013>排序的单词=Ex25.排序的句子(句子)
=>[“所有”、“来”、“好”、“事情”、“那些”、“去”、“等”、“谁”]
2.2.0:014>已排序的单词
=>[“所有”、“来”、“好”、“事情”、“那些”、“去”、“等”、“谁”]
2.2.0:015>Ex25.先打印后打印(句子)
全部的
NoMethodError:未定义nil:NilClass的方法'pop'
from/Users/me/Documents/RUBY/ex25.rb:18:in'print\u last\u word'
from/Users/me/Documents/RUBY/ex25.rb:31:in'print_first_和_last'
起始(irb):15
from/Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in`'
2.2.0:016>Ex25.打印排序后的第一个和最后一个(句子)
全部的
NoMethodError:未定义nil:NilClass的方法'pop'
from/Users/me/Documents/RUBY/ex25.rb:18:in'print\u last\u word'
from/Users/me/Documents/RUBY/ex25.rb:37:in'print_first_和_last_sorted'
起始(irb):16
from/Users/me/.rvm/rubies/ruby-2.2.0/bin/irb:11:in`'
2.2.0 :017 >
在Ruby中,局部变量是在解析时确定的。因此,在解析过程中,Ruby会看到对
word
的赋值,并将创建一个名为
word
的局部变量,该变量未定义,但计算结果为
nil
。在运行时,Ruby将尝试使用赋值的右侧来赋值给
word
,右侧也会引用
word
本身。由于尚未分配
word
,因此其计算结果为
nil
,这导致在
nil
上调用
pop
,而该方法没有
pop
方法


您可能想调用参数绑定
words
,而不是局部变量
word
。请注意,任何Ruby IDE都可能会警告您未使用的参数。

在哪里定义了
pop
方法?在这两种方法中,您都将数组作为参数传递。但是——在
print\u last\u word
方法中,
words
数组的值为
nil
,因此抛出
未定义方法
错误。除此之外,这里没有足够的代码来指出您的问题。你最好的办法(在获取帮助方面)是发布最少数量的代码来重现问题。抱歉,我链接到了我在问题中使用的代码@我不知道定义pop方法意味着什么@orde I在书中按照相同的顺序完成了练习,创建了一个名为ex25的文件,并按照建议运行代码,但没有得到“nil”消息,我从/Users/me/Documents/RUBY/ex25获得了nil:NilClass的'NoMethodError:undefined method
pop'。rb:18:in
print_last_word'from/Users/me/Documents/RUBY/ex25。rb:37:in'print_first_and_last_sorted'from(irb):16'@谢谢你的建议,我现在已经把我使用的完整代码放进去了。这是我试图复制的练习:在StackOverflow上发布代码时,请使用正确的格式。Ruby中的缩进是2个空格。在代码中使用了四种不同的缩进,没有一种是正确的:0、4、8和12个空格,而不是通常使用的2个空格。另外,请发布重现问题所需的最少代码。在您的例子中,错误消息清楚地说明了错误所在的方法,其余的都是无关的。让别人为你做工作是非常不礼貌的,然后甚至不确保他们不必费力地通过堆积如山的格式糟糕的无关代码。
def Ex25.print_last_word(words)
  word = word.pop
  puts word
end