Вызов метода может привести к появлению NoMethodError в Ruby. - PullRequest
0 голосов
/ 08 июля 2019

У меня есть код:

# frozen_string_literal: true

require 'httpclient'

client = HTTPClient.new
response = client.get 'https://httpbin.org/get'

body = response.body

puts body

Почему в RubyMine есть предупреждение о вызове метода, что может привести к появлению NoMethodError?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

На трекере RubyMine есть соответствующая проблема, поэтому вы можете следить за ней: https://youtrack.jetbrains.com/issue/RUBY-24592

1 голос
/ 08 июля 2019

По сути, любой объект, который не отвечает на вызываемый метод, вызовет ошибку 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 вернет nil или любой другой объект, который не реализует body, то у вас будет NoMethodError.

Если вы уверены, что вы никогда не получите nil после вызова get на client, тогда вы можете пропустить это предупреждение.

...