我有一个Book < LibraryItem
和 a Book::Page,定义为
class Book
class Page
在模型/书/page.rb
LibraryItem有一个方法叫做can_edit?
但是我Book::Page.new.can_edit?没有返回任何方法错误...
如何LibraryItem在我的命名空间中包含实例方法?
我有一个Book < LibraryItem
和 a Book::Page,定义为
class Book
class Page
在模型/书/page.rb
LibraryItem有一个方法叫做can_edit?
但是我Book::Page.new.can_edit?没有返回任何方法错误...
如何LibraryItem在我的命名空间中包含实例方法?
如果您在 irb 控制台上运行此代码,Ruby 默认访问父方法:
class LibraryItem
def can_edit?
true
end
end
class Book < LibraryItem
class Page
end
end
您可以轻松访问 can_edit?方法,只是做:
book = Book.new
book.can_edit?
但是从 Page 类你不能访问 LibraryItem 方法,因为它不在继承链上
提示:命名空间使用模块而不是嵌套类。
这将返回错误,因为Page没有can_edit?方法。ABook有一个Page类,但Page不是Libraryitem 的子类(只是Book)。所以can_edit?对 有效Book但对无效Page。
尝试
p Book::Page.superclass
你会得到Object