def room_actions
case $next_move
when "instructions"
instructions
when $next_move.any? { |x| ['up', 'down', 'left', 'right'].include?(x) }
determine_start
else
puts "I don't understand that."
prompt; $next_move = gets.chomp()
room_actions
end
end
请原谅我不理解这里发生了什么,但为什么ruby会抛出这个错误?
foo.rb:83:在
room_actions': undefined method
任何?' for“”:String(NoMethodError)
$next_move
是一个全局变量(我知道它们很糟糕,我正在重构),我从状态机中获取chomp来提供这个方法。
似乎我没有定义'any?'方法。或者我传递的字符串是空的?无论如何,不是'.any?'一个内置的ruby方法?我正在使用2.0.0。
感谢您查看并提供建议。
答案 0 :(得分:5)
字符串(空或不是)没有any?
方法(可枚举,例如数组或散列)。字符串在ruby 1.8中是可枚举的,但不再如此。)
我很不清楚你为什么要首先在它上面调用.any?
- 如果你想检查它是否是允许值列表之一那么
['up','down','left','right'].include?($next_move)
将完成这项工作
答案 1 :(得分:0)
错误消息
undefined method `any?' for "":String
表示您尝试在any?
上致电String
。但是,any?
方法仅在Enumerable
上定义(因此在Array
和Hash
等集合上定义)
答案 2 :(得分:0)
任何?方法是用于数组。
做的只是:
['up', 'down', 'left', 'right'].include?($next_move)