Noob问题.我在包含这个类的文件上运行了RubyMine的Code Inspect.
class Square
attr_accessor :width
def area
@width * @width
end
end
Run Code Online (Sandbox Code Playgroud)
我很惊讶地收到两条警告@width * @width:
Cannot find declaration for field '@width'
----编辑----
Ruby-Doc说的这个attr-accessor
为此模块定义命名属性,其名称为symbol.
id2name,创建一个实例变量(@name)和一个相应的访问方法来读取它.还创建一个名为name=设置属性的方法.字符串参数转换为符号.
对我来说,"定义"意味着它有一个"声明".警告信息没有意义."警告:使用前字段可能未初始化"更准确.
我认为这是一个RubyMine问题(如果它是一个问题).RubyMine显然使用自己的代码检查协议,不使用标准Linter.
看来@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
Run Code Online (Sandbox Code Playgroud)
如果没有它,您在调用时会收到错误Square.new.area(因为在定义正方形时没有设置宽度)。