未定义的方法'.any?' for“”:String(NoMethodError

时间:2013-06-09 00:15:52

标签: ruby any

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。

感谢您查看并提供建议。

3 个答案:

答案 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上定义(因此在ArrayHash等集合上定义)

答案 2 :(得分:0)

任何?方法是用于数组。 做的只是: ['up', 'down', 'left', 'right'].include?($next_move)