ruby - 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
解决方案
这是你的问题:
rps = RPS.new(guess: gets)
您从中获得的字符串gets
包含一个尾随换行符。自然,即使使用.to_sym
. .chomp
例如,用 修剪换行符。
我觉得您实际上想使用字符串键。如果是这样,这将是语法:
def rule_engine
{
'Rock' => ['Scissors'],
'Paper' => ['Rock'],
'Scissors' => ['Paper']
}
end
推荐阅读
- browser - 截至 2018 年,浏览器是否有办法获取有关用户硬件的数据?
- javascript - Django:如何保存 mxGraph,所以当用户刷新图形时会保留?(异步)
- javascript - 以下 2 组代码,其中一组有效,另一组无效。有人可以帮我理解为什么
- python - 图像区域的直方图
- python - 解析错误的 XHTML
- java - 在两个字符串之间查找文本(十六进制)
- python - 在 python 中的 Cypher 查询中传递变量
- dart - 如何将 BottomNavigationBar 与 BLoC 一起使用?
- html - ionic 3 storage 获取数据并在 html 中显示
- sql-server - 重叠日期时间的触发器