- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我看到 issue在 Ruby 中使用类变量;然而,RuboCop 似乎是 documentation对于如何解决问题是不够的。
现在,我可以忽略它。鉴于我的项目,这并不重要。但是,我只想知道 Rubocop 试图告诉我做什么,因为它没有意义。
执行提供的 code在 irb 0.9.6
和 Ruby 2.5.1
中给出:
class A
@test = 10
end
#=> 10
class A
def test
@@test # you can access class variable without offense
end
end
#=> :test
A.new.test
Traceback (most recent call last):
3: from /Users/Ricky/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
2: from (irb):12
1: from (irb):9:in `test'
NameError (uninitialized class variable @@test in A)
Did you mean? @test
所以,不。显然,我们不能毫无冒犯地访问类变量。 irb 非常被冒犯了。但是,ruby 建议使用 @test
。也许这只是一个错字?让我们试试看:
class A
@test = 10
def test
@test # you can access class variable without offense
end
end
#=> :test
A.new.test
#=> nil
因此,实例变量从未被定义。 RuboCop 在这里想说什么?
最佳答案
您忽略了变量范围之间的区别。
class A
@test = 42
end
上面在类范围内声明了一个实例变量。它可以访问为
A.instance_variable_get(:@test)
#⇒ 42
您可以为这个变量定义一个访问器:
class A
@test = 42
def self.test
@test
end
end
A.test #⇒ 42
它在实例之间共享,要从实例访问它,您应该引用该类:
# ⇓⇓⇓⇓⇓ HERE
A.new.class.test #⇒ 42
以下代码在类实例上声明了一个实例变量:
class A
def initialize
@test = 42
end
end
它可以从 A
的实例访问:
A.new.instance_variable_get(:@test)
#⇒ 42
类变量在类层次结构中使用时有一些缺点,这就是 [可能] 为什么 Rubocop 建议不要使用类变量(或者它建议的任何东西——老实说我从来没有使用它,因为它带来的弊大于利恕我直言。)
在您的第一个片段中,您错过了 @
。正确的代码是:
class A
# ⇓⇓ HERE
@@test = 10
end
class A
def test
@@test # you can access class variable without offense
end
end
关于ruby - 如何在 RuboCop 中更正 `Style/ClassVars`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984143/
假设我有以下代码: from typing import ClassVar class A: a: ClassVar[str] 如何在运行时检查 a 是否已声明为 ClassVar? 我尝试使
执行简单的 Groovy 程序时出现主题行错误 我是 groovy 和 java 编码的新手,我收到主题行错误,我不认为语法或代码有问题 package test.demo class classEx
我看到 issue在 Ruby 中使用类变量;然而,RuboCop 似乎是 documentation对于如何解决问题是不够的。 现在,我可以忽略它。鉴于我的项目,这并不重要。但是,我只想知道 Rub
我已按照以下链接安装 Airflow 的步骤 Airflow installation并得到以下错误 Traceback (most recent call last): File "/usr
我正在尝试使用工厂函数来生成一些类型注释 - 特别是针对 tuple 类型。我有一个可以正常工作的工厂版本(例如,它在 MyPy 中编译、运行和检查令人满意): import typing as tx
我是一名优秀的程序员,十分优秀!