ruby - 我该如何解决这个问题?类的未定义方法
问题描述
有问题,运行代码时总是有错误。期望:为用户增加赢或减少他的余额。
undefined method `balance=' for #<Dice:0x0000563d4d4dfd88 @name="foo", @balance=600, @bet=300>
Did you mean? balance
(repl):22:in `increase_decrease_cash'
(repl):62:in `<class:Game>'
(repl):29:in `<main>'
这个错误总是出现,重试了我能猜到的一切,但没有任何结果,我不明白它是如何被谷歌搜索的
class Dice
attr_accessor :name, :bet
attr_reader :balance
def initialize(name, balance, bet)
@name = name
@balance = balance
@bet = bet
end
def self.roll
@roll_dice = rand(1..2)
end
def self.check_bet
if @player.bet > @player.balance
puts "Enter number from 1 to #{@player.balance}"
end
end
def self.increase_decrease_cash
if @roll == @my_number
@player.balance += @player.bet
else
@player.balance -= @player.bet
end
end
end
class Game < Dice
@player = Dice.new("foo", 600, 0)
puts "Hello #{@player.name} your balance is: #{@player.balance}"
puts "Bones throwing count times"
a = 2 #gets.chomp.to_i
while a > 0 do
puts ""
puts "Enter your bet !!!"
# PLAYER BET
@player.bet = 300 #gets.chomp.to_i
check_bet
puts "Respected #{@player.name} your bet is: #{@player.bet}"
puts "Now select number 1-2"
# BONES ROLL
@my_number = roll # gets.chomp.to_i
puts "###################"
puts "Now we throw bones"
@roll = roll
puts "Nuber is #{roll}"
if @roll == @my_number
puts "Your win, you get #{@player.bet}"
else
puts "You lose #{@player.bet}"
end
p "$$$$"
p @player.balance
p "$$$$"
a -= 1
increase_decrease_cash
end
end
这个错误总是出现,重试了我能猜到的一切,但没有任何结果,我不明白它是如何被谷歌搜索的
解决方案
attr_reader
只为 . 创建 get 方法balance
。您需要 get 和 set 方法balance
。因为你balance
在初始化方法中设置了。因此,您应该使用attr_accessor而不是attr_reader
.
attr_accessor :balance
推荐阅读
- selenium - 在 Selenium python 中找到一个具有特定文本跨度的按钮
- node.js - 如何通过指定星号 (*) 使用节点运行所有测试?
- java - Java GC - Minor GC Collection 是 STW 事件吗?
- ssis - SSIS 暂存截断仓库
- javascript - 如何解决 Socket.io 传输轮询错误
- python - 在 tensorflow 2/keras 中重新分配权重
- notepad++ - 如何在记事本++中禁用EOL
- elasticsearch - 无法创建 ES 映射日期字段
- c# - Outlook 桌面客户端中的 Base64 svg 支持以及使用自定义 bgcolor 将 base64 svg 转换为 base64 png
- sql - 两个选择语句之间的数学运算