Ruby 初級者です。クラスの考えなどが混乱しています。
(例は何でも良いのですが、例えばSelenium WebDriverに)
自作のメソッドを追加するにはどのように記述したら良いのでしょうか?
通常はhoge.rbに下記のように使用しますが、
ruby
1@d = Selenium::WebDriver.for :chrome 2@d.get("https://hoge.com") 3@d.find_element(:id, "hoge")
例えば、find_elementに標準出力機能を追加したメソッドを作りたい場合に、
hoge.rb内に下記を記述すると、
ruby
1def find_element_puts(x, y) 2 puts "hogehoge" 3 @d.find_element(x, y) 4end 5 6@d.find_element_puts("id", "hoge") 7=> hogehoge 8としたいのですが、 9 10 11@d.find_element_puts("id", "hoge") 12=>#<NoMethodError: private method `find_element_puts' called for #<Selenium::WebDriver::Chrome::Driver:0x1a0ce4a97d01d26 browser=:chrome> 13となってしまいます。
どこのファイルにどのように記述したら良いのでしょうか?
アドバイスよろしくお願いいたします。
find_element_putsって自分で勝手に作ったものなら
@dとかインスタンスから呼び出さずに
find_element_puts("id", "hoge")
で良いのでは?
それに、ライブラリ使ってるなら処理がまとまってるので勝手に追加できないような。(ちょっと何がしたいのか分かりかねます)
@d.find_element(:id, "hoge").find_element(:class, "hoge")
のように、find_elementを複数段階使うことがありまして、
def find_element_puts("id", "hoge")
puts "hogehoge"
@d.find_element(:id, "hoge")
end
とすると、1段階しか使うことができないんです。
チェーンメソッドと言うことなら組み方変わってきそうに思います。
いずれにしてもライブラリに組み込む=ライブラリのルールに則って対応する
ことになるので、結構難儀かなと。
継承してメソッドオーバーライドとかできるかも?(Ruby自体業務で利用したことないので調べた感じですが)
回答2件
あなたの回答
tips
プレビュー