为什么Ruby会为私有属性发出警告

shi*_*ime 8 ruby language-design private

以示例类为例:

# in ./example.rb
class Example
  private
    attr_accessor :name
end
Run Code Online (Sandbox Code Playgroud)

当我以详细模式运行它时,Ruby会向我发出警告:

$ ruby -W2 ./example.rb
example.rb:3: warning: private attribute?
Run Code Online (Sandbox Code Playgroud)

为什么不推荐这个?

Pat*_*ity 2

因为在大多数情况下定义从外部不可见的 getter/setter 没有多大意义。我们通常attr_accessor仅用于在类外部公开实例变量。然而,该private关键字使生成的 getter/setter 方法对外界不可见,从而破坏了这一目的。

您想要使用私有 setter/getter 的唯一原因是涉及一些额外的逻辑。然而,在这种情况下,无论如何,您都必须使用 手动定义这些方法def

  • 抱歉,我不清楚。我的意思是,如果您使用“@foo”并发现需要额外的逻辑,则必须在各处更改“@foo”。而如果你做“private;” attr_accessor :foo`并使用`foo`,如果您发现需要额外的逻辑,您只需要`def foo`,而不是搜索并替换`@foo`。 (5认同)