Я написал программу tictactoe, и я пытаюсь организовать ее в классы.Разбиение программы на классы и доступ к переменным из одного класса в другой
class Board
attr_accessor :fields
def initialize
self.fields = {
'1' => ' ', '2' => ' ', '3' => ' ',
'4' => ' ', '5' => ' ', '6' => ' ',
'7' => ' ', '8' => ' ', '9' => ' '
}
end
def set_stone_at(position, stone)
fields[position] = stone
end
def stone_at(position)
stone = fields[position]
puts stone
end
def show
puts fields
end
end
class Game
attr_accessor :board
def initialize
self.board = Board.new
end
def print_board
puts "\n #{fields['1']} | #{fields['2']} | #{fields['3']}"
puts " --*---*---"
puts " #{fields['4']} | #{fields['5']} | #{fields['6']}"
puts " --*---*---"
puts " #{fields['7']} | #{fields['8']} | #{fields['9']} \n"
end
end
board = Board.new
board.show
Game.new.board.show
game = Game.new
game.board.set_stone_at('1', 'X')
game.board.set_stone_at('2', 'O')
game.print_board
У меня возникли проблемы с доступом к переменной fields
из класса Board
в классе Game
. Я получаю сообщение об ошибке:
in `print_board': undefined local variable or method `fields' for #<Game:0x007ffc1a895710> (NameError)
Я хотел бы получить любую помощь. Я благодарен за любую помощь и объяснения.
Переместить метод 'print_board' в класс' Board', класс 'Game', похоже, не делает ничего –
Привет, да, это так, но я думал логически, print_board должен быть в классе Game, или Я ошибаюсь? – ayda
Я не скажу, что вы ошибаетесь, поскольку это вопрос мнения. Лично я бы предпочел, чтобы методы, которые нуждались в доступе к частным членам «Совета», были в «Совете», кажется неправильным раскрывать внутреннее состояние «Правления» внешнему миру. Вы правильно используете методы mutatator для 'fields' в' set_stone_at' и 'stone_at', поэтому кажется, что не нужно выставлять' fields' через 'attr_accessor' –