如何从一个类到另一个类访问实例变量

问题描述 投票:0回答:1

我正在用Ruby创建一个简单的Rock,Paper,Scissor OOP游戏,以更好地了解Ruby OOP的所有工作原理。但是我遇到了问题。

我想从另一个类访问实例变量,但是在运行程序时收到此错误

Traceback (most recent call last):
    2: from rps.rb:44:in `<main>'
    1: from rps.rb:40:in `start'
rps.rb:17:in `greeting': undefined method `name' for nil:NilClass (NoMethodError)

第17行是

puts "Welcome #{@player1.name} and #{@player2.name}"

这是我到目前为止的所有代码

class Player
  attr_accessor :name, :player1, :player2,

  def initialize(name)
    @name = name
    @player1 = Player.new(name1)
    @player2 = Player.new(name2)
  end
end

class Main

  def greeting
    puts "Welcome to Rock-Paper-Scissor"
    sleep(0.5)
    puts "Welcome #{@player1.name} and #{@player2.name}"

  end 

  def instruct
    puts "The rules of the game are simple\n"
    puts "Choose Rock, Paper or Scissor each turn\n "
    puts "Paper beats Rock, Scissor beats paper and Rock beats Scissor\n"
    puts "Ready....?"
  end

end

def start
  puts "Hi, please enter your name player 1: "
  name1 = gets.chomp
  puts "Hi, please enter your name player 2: "
  name2 = gets.chomp

  game = Main.new
  game.greeting
  game.instruct
end

start

*****对代码进行了新更改,使其可以正常运行*******

class Player
    attr_accessor :name

    def initialize(name)
        @name = name
    end

end

class Game
    def greeting
        puts "Hi, please enter your name player 1: "
        name1 = gets.chomp
        @player1 = Player.new(name1)
        puts "Hi, please enter your name player 2: "
        name2 = gets.chomp
        @player2 = Player.new(name2)
        puts "Welcome to Rock-Paper-Scissor"
        sleep(0.5)
        puts "Welcome #{@player1.name} and #{@player2.name}"

    end 

    def instruct
        puts "The rules of the game are simple\n"
        puts "Choose Rock, Paper or Scissor each turn\n "
        puts "Paper beats Rock, Scissor beats paper and Rock beats Scissor\n"
        puts "Ready....?"
    end


end

def start
    game = Game.new
    game.greeting
    game.instruct

end 
start
ruby oop instance-variables
1个回答
0
投票

您可以做这样的事情。

def greeting
  ...
  return name1, name2
end

def start
    game = Game.new
    name1,name2=game.greeting
    game.instruct
end
© www.soinside.com 2019 - 2024. All rights reserved.