首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ShadowingOuterLocalVariable rubocop误差

ShadowingOuterLocalVariable rubocop误差
EN

Stack Overflow用户
提问于 2018-04-20 08:00:29
回答 1查看 224关注 0票数 0

这是我的代码,这是我的错误。我认为这里不需要更多的描述:

代码语言:javascript
复制
#terminal-error    (error on  object  "= ->(object) do "

lib/form_object/base.rb:18:30: W: Lint/ShadowingOuterLocalVariable: Shadowing outer local variable - object.
        need_validation = ->(object) do
代码语言:javascript
复制
def valid?
  valid_attributes = []

  attributes.each do |attribute_name, _attributes|
    attribute_set = self.class.attribute_set[attribute_name]
    object        = self[attribute_name]

    need_validation = ->(object) do
      (object.class < FormObject::Base || attribute_set.options[:validate]) && object.respond_to?(:valid?)
    end

    if need_validation.call(object)
      valid_attributes << object.valid?
    elsif object.is_a?(Array)
      object.each do |nested|
        valid_attributes << nested.valid? if need_validation.call(nested)
      end
    end
  end
  valid_attributes << super

  valid_attributes.all?
end
EN

回答 1

Stack Overflow用户

发布于 2018-04-20 13:14:02

这是来自运行的lint的警告,它检测到从外部作用域中隐藏(即隐藏)另一个局部变量的情况。

你有:

代码语言:javascript
复制
object        = self[attribute_name]

need_validation = ->(object) do
  (object.class < FormObject::Base || attribute_set.options[:validate]) && object.respond_to?(:valid?)
end

因此,第一个变量object不能在lambda中引用,因为参数也称为object

只需重命名lambda的参数,就可以删除此警告:

代码语言:javascript
复制
need_validation = ->(obj) do
  (obj.class < FormObject::Base || attribute_set.options[:validate]) && obj.respond_to?(:valid?)
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49936866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档