【问题标题】:Undefined method '.any?' for "":String (NoMethodError未定义的方法 '.any?'对于“”:字符串(NoMethodError
【发布时间】:2013-06-10 08:38:37
【问题描述】:
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:in room_actions': undefined methodany?'对于“”:字符串(NoMethodError)

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

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

感谢您的浏览和建议。

【问题讨论】:

    标签: ruby any


    【解决方案1】:

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

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

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

    会做好的

    【讨论】:

    • 啊哈!这就是为什么它不起作用。我在 1.8.7 中编写它,现在在 2.0.0 中运行它!我知道我没疯!谢谢。
    【解决方案2】:

    错误信息

    undefined method `any?' for "":String
    

    表示您正试图通过String 呼叫any?。但是,any? 方法仅在 Enumerable 上定义(因此在 ArrayHash 等集合上定义)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多