Ruby子类不继承父方法或不能在类体中调用父方法

时间:2016-07-03 03:42:07

标签: ruby inheritance

我正在制作一个页面对象。

cublasSgeam

但是当我继承require 'watir-webdriver' class Page attr_accessor :driver def initialize @driver = Watir::Browser.new :phantomjs @driver.goto(some_arbitrary_url) end def element(**attrs) @driver.element( id: attrs[:id], tag_name: attrs[:tag_name]) end def elements(**attrs) @driver.elements( class: attrs[:class], tag_name: attrs[:tag_name]) end end 类时,我不能在类体中使用它的Page方法,除非我把它们放在一个方法中,如下所示:

element

到目前为止,只是修补,我尝试class Home < Page #throws NoMethodError: undefined method 'element' for Home:Class some_element = element(id: 'elements_id') #works def some_arbitrary_element element(id: 'elements_id') end end 以及protected: element, elements都无济于事。发生什么了?我没有在Matz的Ruby书中读到有关方法继承的任何启发,通常Ruby也不足为奇,因此我很难确定问题的实际位置。

1 个答案:

答案 0 :(得分:1)

您正在调用元素,就好像它被定义为类方法一样。类定义中但不在方法定义中的任何代码只能调用类方法。一种使方法可见的方法是从调用它的位置改变签名,使其成为类对象的方法。

class Page
  def self.element
  end
end