努布问题。我在一个包含这个类的文件上运行RubyMine的代码检查。
class Square
attr_accessor :width
def area
@width * @width
end
end我很惊讶地在@width * @width上收到了两个警告
Cannot find declaration for field '@width'
样式指南的attr部分对我没有帮助。为什么这是警告?
-编辑
红宝石-医生这么说是关于attr-accessor
定义此模块的命名属性,其中名称为符号.
id2name,创建实例变量(@name)和相应的访问方法来读取它。还创建了一个名为name=的方法来设置属性。字符串参数被转换为符号。
对我来说,“定义”意味着它有一个“声明”。警告信息没有意义。“警告:字段使用前不可初始化”更准确。
我认为这是一个RubyMine问题(如果是一个问题的话)。不使用标准链接器的RubyMine显然使用了自己的代码检查协议。。
发布于 2016-06-10 17:35:55
RubyMine在这种情况下显示此警告是一个已知问题。
发布于 2016-06-10 01:00:35
@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时就会出现一个错误(因为已经定义了正方形,但没有设置宽度)。
https://stackoverflow.com/questions/37738412
复制相似问题