我有一个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
不是Library
item 的子类(只是Book
)。所以can_edit?
对 有效Book
但对无效Page
。
尝试
p Book::Page.superclass
你会得到Object