方法调用可能会在 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