首页 > 解决方案 > Ruby 方法返回为“未定义的方法‘包括?’ 对于 nil:NilClass (NoMethodError)"

问题描述

使用随机化和规则引擎创建一个石头、纸、剪刀游戏,但该winner_is方法似乎返回零。我无法真正弄清楚其中的变量返回了什么,因为它在所有 if 条件之前仍然可以很好地打印它们。

class RPS

    def initialize(guess:)  
        @guess = guess.capitalize
    end        

    def rule_engine 
        {
            'Rock': ['Scissors'],
            'Paper': ['Rock'],
            'Scissors': ['Paper']
        }
    end

    def sys_guess
        rand 12345
        sys_guesses = %w{Rock Paper Scissors}
        sys_guesses.sample
    end

    def winner_is 
         puts sys_guess
         puts @guess

        if rule_engine[sys_guess.to_sym].include? @guess
           puts "Computer wins"
         elsif rule_engine[@guess.to_sym].include? sys_guess
           puts "You win!"
         else
           puts "Tie"
         end
    end
end

rps = RPS.new(guess: gets)
rps.winner_is

标签: ruby

解决方案


这是你的问题:

 rps = RPS.new(guess: gets)

您从中获得的字符串gets包含一个尾随换行符。自然,即使使用.to_sym. .chomp例如,用 修剪换行符。


我觉得您实际上想使用字符串键。如果是这样,这将是语法:

    def rule_engine 
        {
            'Rock' => ['Scissors'],
            'Paper' => ['Rock'],
            'Scissors' => ['Paper']
        }
    end

推荐阅读