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-Doc说attr-accessor
为此模块定义命名属性,其名称为 symbol 。
id2name
,创建实例变量(@name
)以及相应的访问方法来读取它。还会创建一个名为name=
的方法来设置属性。字符串参数转换为符号。
对我来说,“定义”意味着它有一个“声明”。警告信息没有意义。 “警告:使用前字段可能未初始化”更准确。
我认为这是一个RubyMine问题(如果它是一个问题)。 RubyMine apparently uses its own code inspection protocol并且不使用标准Linter。
答案 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
时会出现错误(因为已经定义了没有设置宽度的正方形)。