方法调用可能会在 Ruby 中产生 'NoMethodError'
Method invocation may produce 'NoMethodError' in Ruby
我有一些代码:
# frozen_string_literal: true
require 'httpclient'
client = HTTPClient.new
response = client.get 'https://httpbin.org/get'
body = response.body
puts body
为什么 RubyMine 有关于方法调用可能产生的警告 'NoMethodError'?
基本上,任何不响应正在调用的方法的对象都会引发 NoMethodError。
class Response
def body
'hardcoded body'
end
end
class ResponseWithoutBody; end
p Response.new.body
# "hardcoded body"
p ResponseWithoutBody.new.body
# `<main>': undefined method `body' for #<ResponseWithoutBody:0x00007fe903028e08> (NoMethodError)
在您的情况下,如果 response
returns nil
或任何其他未实现 body
的对象,那么您将拥有一个 NoMethodError
.
如果您非常确定在 client
上调用 get
后您永远不会得到 nil
,那么您可以忽略该警告消息。
RubyMine 的跟踪器上有相应的问题,您可以关注它:
https://youtrack.jetbrains.com/issue/RUBY-24592
我有一些代码:
# frozen_string_literal: true
require 'httpclient'
client = HTTPClient.new
response = client.get 'https://httpbin.org/get'
body = response.body
puts body
为什么 RubyMine 有关于方法调用可能产生的警告 'NoMethodError'?
基本上,任何不响应正在调用的方法的对象都会引发 NoMethodError。
class Response
def body
'hardcoded body'
end
end
class ResponseWithoutBody; end
p Response.new.body
# "hardcoded body"
p ResponseWithoutBody.new.body
# `<main>': undefined method `body' for #<ResponseWithoutBody:0x00007fe903028e08> (NoMethodError)
在您的情况下,如果 response
returns nil
或任何其他未实现 body
的对象,那么您将拥有一个 NoMethodError
.
如果您非常确定在 client
上调用 get
后您永远不会得到 nil
,那么您可以忽略该警告消息。
RubyMine 的跟踪器上有相应的问题,您可以关注它: https://youtrack.jetbrains.com/issue/RUBY-24592