次のメソッドの RBS に型チェックのサポートを追加しようとしています。
def create_bridge(caps:, url:, http_client: nil)
Remote::Bridge.new(http_client: http_client, url: url).tap do |bridge|
bridge.create_session(caps)
end
end
このメソッドは次の方法で呼び出すことができます。
def initialize(bridge: nil, listener: nil, **opts)
@devtools = nil
@bidi = nil
bridge ||= create_bridge(**opts)
add_extensions(bridge.browser)
@bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge
end
そして私はRBSで次のように宣言しました。
def create_bridge: (caps: untyped?, url: untyped?, http_client: untyped? ) -> untyped
これにより、急勾配で実行すると次のエラーが発生します。
lib/selenium/webdriver/common/driver.rb:74:19: [error] More keyword arguments are required: caps, url, http_client
│ Diagnostic ID: Ruby::InsufficientKeywordArguments
│
└ bridge ||= create_bridge(**opts)
~~~~~~~~~~~~~~~~~~~~~
ただし、すべてのキーワードをオプションにしようとすると、次のエラーが発生します。
lib/selenium/webdriver/common/driver.rb:315:24: [error] The method parameter is incompatible with the declaration `(?caps: untyped, ?url: untyped, ?http_client: untyped) -> untyped`
│ Diagnostic ID: Ruby::MethodParameterMismatch
│
└ def create_bridge(caps:, url:, http_client: nil)
~~~~~
lib/selenium/webdriver/common/driver.rb:315:31: [error] The method parameter is incompatible with the declaration `(?caps: untyped, ?url: untyped, ?http_client: untyped) -> untyped`
│ Diagnostic ID: Ruby::MethodParameterMismatch
│
└ def create_bridge(caps:, url:, http_client: nil)
メソッド定義をオーバーロードしようとしても同じです
正しい型シグネチャを追加するための最良の方法を教えていただけますか?
この度は誠にありがとうございました
初期化で値を代入する場合はどうすればよいでしょうか?
def initialize(bridge: nil, listener: nil, **opts)
@devtools = nil
@bidi = nil
caps = opts[:caps] # or handle nil case
url = opts[:url] # or handle nil case
http_client = opts[:http_client] # or handle nil case
bridge ||= create_bridge(caps:, url:, http_client:) # explicitly pass attributes
add_extensions(bridge.browser)
@bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge
end