1
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有吗?对于“”:字符串(NoMethodError)

$next_move是一个全局变量(我知道它们很糟糕,我正在重构),我从状态机中的 get chomp 将其输入此方法。

似乎我没有定义“任何?” 方法。或者我传递的字符串是空的?无论如何,不​​是'.any吗?内置红宝石方法?我正在使用 2.0.0。

感谢您的浏览和建议。

4

3 回答 3

5

字符串(是否为空)没有any?方法(可枚举,例如数组或哈希。字符串在 ruby​​ 1.8 中是可枚举的,但现在不再如此)。

我很不清楚你为什么首先尝试调用.any?它 - 如果你想检查它是否是允许值列表中的一个,那么

['up','down','left','right'].include?($next_move)

将完成这项工作

于 2013-06-09T00:50:12.803 回答
0

错误信息

undefined method `any?' for "":String

表示您正在尝试any?调用String. 但是,该any?方法仅定义在Enumerable(因此也定义在像Arrayand之类的集合上Hash

于 2013-06-09T00:50:19.213 回答
0

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

于 2013-06-09T00:50:35.957 回答