एक सरणी को अद्यतन करने की अनुमति न दें मैं एक साधारण टिक टैक पैर गेम लिख रहा हूं, जिसमें मेरे पास बोर्ड, प्लेयर, कंप्यूटर और गेम के लिए एक कक्षा है। मेरे बोर्ड वर्ग में, मैंने एक वर्ग वैरिएबल @बोर्ड (जो एक सरणी है) को attr_reader के रूप में सेट किया है, जिसे सीधे इसे लिखने की अनुमति नहीं देनी चाहिए। हालांकि निम्नलिखित (के रूप में इरादा) काम नहीं करेगारूबी: एक वर्ग परिवर्तनीय
game_board = Board.new
game_board.board = "some junk"
निम्नलिखित काम है, जो मैं
game_board = Board.new
game_board.board[0] = "some junk"
मैं कैसे लिखा जा रहा से वर्ग सरणी चर @board रोकूँ हो नहीं करना चाहते करता है सेवा मेरे? नीचे वर्तमान वर्ग कोड:
class Board
attr_reader :board
def initialize
create_board
end
private
def create_board
@board = Array.new(3).map{Array.new(3)}
end
end
game_board = Board.new
game_board.board
#=> [[nil,nil,nil],[nil,nil,nil],[nil,nil,nil]]
game_board.board = "junk"
#=> undefined method 'board ='
game_board.board[0] = "junk"
game_board.board
#=> ["junk",[nil,nil,nil],[nil,nil,nil]] #I don't want to allow this!
मैं इस googling की कोशिश की, लेकिन कोई लाभ नहीं हुआ, हालांकि मैं पूरी तरह से शुरुआत कर रहा हूँ, इसलिए मैं सही खोज शब्दों
"अपरिवर्तनीय सरणी" और "फ्रीज सरणी" के लिए खोजें। अपरिवर्तनीयता को विशिष्ट वस्तु द्वारा लगाया जाना चाहिए क्योंकि 'x.y = a' के पास' x.y.z = b' में * असाइनमेंट * के बारे में कोई संबंध या विचार नहीं है (सिवाय इसके कि 'x.y' पहले किसी ऑब्जेक्ट को हल किया गया है)। – user2864740
शब्दावली नोट: '@ बोर्ड' कक्षा चर नहीं है, यह एक आवृत्ति चर है। कक्षा चर दो '@' से शुरू होता है, उदा। '@@ board'। –