检查警告:找不到字段

时间:2016-06-10 00:54:10

标签: ruby rubymine

Noob问题。我在包含这个类的文件上运行了RubyMine的Code Inspect。

class Square
  attr_accessor :width

  def area
    @width * @width
  end
end

我很惊讶在@width * @width行上发出两条警告:

Cannot find declaration for field '@width'

attr section of the Style Guide对我没有帮助。为什么这是一个警告?

---- ----编辑
Ruby-Docattr-accessor

  

为此模块定义命名属性,其名称为 symbol id2name,创建实例变量(@name)以及相应的访问方法来读取它。还会创建一个名为name=的方法来设置属性。字符串参数转换为符号。

对我来说,“定义”意味着它有一个“声明”。警告信息没有意义。 “警告:使用前字段可能未初始化”更准确。

我认为这是一个RubyMine问题(如果它是一个问题)。 RubyMine apparently uses its own code inspection protocol并且不使用标准Linter。

2 个答案:

答案 0 :(得分:5)

在这种情况下,RubyMine显示此警告是known issue

答案 1 :(得分:1)

似乎@width未被初始化。

class Square
  attr_accessor :width

  def initialize(width)
    @width = width
  end

  def area
    @width * @width
  end
end

x = Square.new(4)
#=> #<Square:0x00000002371ef8 @width=4>
x.area
#=> 16

如果不这样做,在调用Square.new.area时会出现错误(因为已经定义了没有设置宽度的正方形)。