0
这是一个非常奇怪的。实例变量没有明确告诉它变化
所以我有一个类LibSystem
class LibSystem
attr_accessor :borrower
attr_reader :books
def initialize(book_inventory = [])
@borrower = []
@books = book_inventory
@borrowed = []
end
#...
end
从另一个文件我做require_relative
和包含它的文件。然后我这样做...
#...
sys = LibSystem.new(books)
puts sys.books.length
books << Book.new("Adventure Of My New Cat", "3-598-21515-0", "3", "funny publications", "2001", [auth3], 1)
puts sys.books.length
我期望的是第一个长度是9(我传递给构造函数的数组的大小),第二个是相同的。相反,我得到9和10。这看起来像我的sys
对象中的实例变量正在与传递给它的数组一起更新。这对我来说似乎完全错误。我在这里做了什么不对,还是这是标准行为?谢谢。
标题可能不准确,如果你有更好的东西,随时编辑。
会做一个数组的副本,并通过该工作,并最重要的是一个很好的做法?谢谢。 –
我会建议您在调用之前不要复制,而是在赋值给实例变量之前让您的初始化程序复制数组 - 这样,无论调用LibSystem类的代码编写得有多好,您的类都期望没有人会干涉与它的状态。 – mattbornski
我认为这是完全合理的做法。并不总是最高效的,但我会选择几乎所有应用程序的正确性和可靠性。 – mattbornski