gpt4 book ai didi

Ruby 子类不继承父方法或无法调用类主体中的父方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:17 25 4
gpt4 key购买 nike

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

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 以及 self.element(...) 都无济于事。发生什么了?我没有在 Matz 的 Ruby 书中阅读任何关于方法继承的启发性内容,而且通常 Ruby 是如此不足为奇,所以我很难确定问题到底出在哪里。

最佳答案

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

class Page
def self.element
end
end

关于Ruby 子类不继承父方法或无法调用类主体中的父方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38166530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com