首页 > 解决方案 > 我该如何解决这个问题?类的未定义方法

问题描述

有问题,运行代码时总是有错误。期望:为用户增加赢或减少他的余额。

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

这个错误总是出现,重试了我能猜到的一切,但没有任何结果,我不明白它是如何被谷歌搜索的

标签: ruby

解决方案


attr_reader只为 . 创建 get 方法balance。您需要 get 和 set 方法balance。因为你balance在初始化方法中设置了。因此,您应该使用attr_accessor而不是attr_reader.

attr_accessor :balance

推荐阅读