Ruby在一个类方法中迭代,同时引用另一个类

ctzwtxfj  于 2022-10-15  发布在  Ruby
关注(0)|答案(1)|浏览(135)

解决了。我没有初始化权限,这导致了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

我对课程还很陌生(还有这个网站,很抱歉格式化)。谢谢你的帮助。

hc2pp10m

hc2pp10m1#

您已经为:bookPagesInfo:bookChaptersInfo定义了attr_accessor,这将为您提供读取器和写入器方法,但它不会在initialize方法中为您设置@bookPagesInfo@bookChaptersInfo-您需要自己设置。因此,当您尝试读取applyEdit中的示例变量时,您读取的是nil
尝试添加

@bookPagesInfo = bookPagesInfo
  @bookChaptersInfo = bookChaptersInfo

Book#initialize中。

相关问题