Как получить доступ к переменным экземпляра из одного класса в другой - PullRequest
0 голосов
/ 23 декабря 2019

Я нахожусь в процессе создания простой игры Rock, Paper, Scissor OOP в ruby, чтобы лучше понять, как все работает для 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

1 Ответ

0 голосов
/ 23 декабря 2019

вы можете сделать что-то вроде этого.

def greeting
  ...
  return name1, name2
end

def start
    game = Game.new
    name1,name2=game.greeting
    game.instruct
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...