我有如下方法
sig do
params(uri: URI).returns(String)
end
def get(uri)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.start
response = http.request_get(uri.path)
response.body
ensure
http&.finish
end
測驗方法如下(不使用冰糕)
def test_get_retry
uri = URI('http://localhost:4567')
instance = BookStoreHttpClient.new
begin
instance.get_with_retry(uri)
rescue StandardError
assert(true)
end
end
但是冰糕抱怨“方法host不存在URI”,但它實際上是一個內核類。
有沒有辦法告訴 Sorbet 使用 Kernel::URI 而不是 URIsorbet/rbi/hidden-definitions/hidden.rbi
uj5u.com熱心網友回復:
Sorbet 是正確的,問題不在于它使用了錯誤的URI.
URI不是型別,它是包含 types: 等的模塊URI::Generic也不是型別,它是回傳模塊中包含的型別之一的實體的函式URI::HTTPS。Kernel::URIURI
例如:
URI("google.com") # => #<URI::Generic google.com>
URI("https://www.google.com") # => #<URI::HTTPS https://www.google.com>
您應該指定所需的 URI 型別,例如:
params(uri: URI::HTTPS).returns(String)
或者選擇一個子集并使用聯合型別:
params(uri: T.any(URI::HTTP, URI::HTTPS)).returns(String)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/437503.html
