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 methodpop'。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