解决了。我没有初始化权限,这导致了noMethodError。然后我更改了一个数组,但是检查了一个引用数组中某个位置的变量,并且该变量没有被重新赋值。
按照建议进行编辑以初始化bookPagesInfo、bookChaptersInfo、editPagesInfo和editChapterInfo。仍然显示相同的NoMethod错误。
我有一本书的页面和章节信息,并希望能够应用编辑,更改页数,介绍页面,章节和POV。
class Book
attr_accessor :pages, :chapters, :bookPagesInfo, :bookChaptersInfo, :introPages, :povs
def initialize(bookPagesInfo, bookChaptersInfo)
@bookPagesInfo = bookPagesInfo
@bookChaptersInfo = bookChaptersInfo
@pages = bookPagesInfo[0]
@introPages = bookPagesInfo[1]
@chapters = bookChaptersInfo[0]
@povs = bookChaptersInfo[1]
end
def applyEdit(edit)
@pages += edit.new_pages
end
end
class Edit
attr_accessor :new_pages, :new_chapters, :editPagesInfo, :editChaptersInfo, :new_intro_pages, :new_povs
def initialize(editPagesInfo, editChaptersInfo)
@editPagesInfo = editPagesInfo
@editChaptersInfo = editChaptersInfo
@new_pages = editPagesInfo[0]
@new_intro_pages = editPagesInfo[1]
@new_chapters = editChaptersInfo[0]
@new_povs = editChaptersInfo[1]
end
end
上面的代码只适用于编辑页数。但是,如果我将applyEdit方法更改为迭代bookPagesInfo数组,则无法使其工作。运行下面的applyEdit会出现一个非致命错误。
def applyEdit(edit)
@bookPagesInfo.each_with_index do {|stat, idx| stat += edit.bookPagesInfo[idx]}
end
## gives undefined method `each_with_index' for nil:NilClass (NoMethodError), but
## my understanding is as long as bookPagesInfo was initialized as an array, it
## should be an array, not nilClass
我对课程还很陌生(还有这个网站,很抱歉格式化)。谢谢你的帮助。
1条答案
按热度按时间hc2pp10m1#
您已经为
:bookPagesInfo
和:bookChaptersInfo
定义了attr_accessor
,这将为您提供读取器和写入器方法,但它不会在initialize
方法中为您设置@bookPagesInfo
和@bookChaptersInfo
-您需要自己设置。因此,当您尝试读取applyEdit
中的示例变量时,您读取的是nil
。尝试添加
在
Book#initialize
中。