【问题标题】:Direct reading of an instance variable直接读取实例变量
【发布时间】:2018-12-15 22:26:40
【问题描述】:

由于某种原因,这段代码会起作用:

class Foo
  @foo = "foo"
end

Foo.new.@foo # => "foo"

我明白了,这个特性已经在标准库规范中使用了,但它似乎没有被记录。那么问题来了,该功能的状态如何,应该使用它吗?

【问题讨论】:

  • 我想现在可以使用它,但为什么呢?你总是可以使用Foo.new.foo 对吧?
  • 对于Foo.new.foo,您需要定义它。例如getter :foo。它看起来更像是一个问题,我建议to report it。如果您想保持代码兼容,通常不应使用未记录的功能。它可能会在标准库中存在一段时间,直到某些东西被修复并且交付的库将依赖于适当的机制。

标签: instance-variables crystal-lang undocumented-behavior


【解决方案1】:

此功能目前用于内部用途,但讨论它以限制对实例变量的外部访问。类似于protected 方法的行为可能会有用。

这个问题是crystal-lang/crystal#6066

我通常会避免使用此功能,因为它没有文档记录并且很可能在某个时候被更改。

【讨论】:

  • 它也用于自动定义结构相等性。如果您愿意,您基本上可以使用它,但不推荐。您通常应该使用 getter。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2023-03-16
  • 2011-06-06
  • 1970-01-01
  • 2014-09-21
相关资源
最近更新 更多