Instance variables 实例变量的直接读取

Instance variables 实例变量的直接读取,instance-variables,crystal-lang,undocumented-behavior,Instance Variables,Crystal Lang,Undocumented Behavior,出于某种原因,此代码将起作用: class Foo @foo = "foo" end Foo.new.@foo # => "foo" 我明白了,这个特性已经在标准库规范中使用过了,但它似乎是未经证明的。因此,问题是,应该使用该功能的状态如何?该功能目前用于内部用途,但讨论该功能是为了限制对实例变量的外部访问。类似于受保护的方法的行为可能很有用 这方面的问题是 我通常会避免使用此功能,因为它没有文档记录,并且很可能在某个时候被更改。我想现在可以使用此功能,但为什么?您可以始终使用Fo

出于某种原因,此代码将起作用:

class Foo
  @foo = "foo"
end

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

我明白了,这个特性已经在标准库规范中使用过了,但它似乎是未经证明的。因此,问题是,应该使用该功能的状态如何?

该功能目前用于内部用途,但讨论该功能是为了限制对实例变量的外部访问。类似于
受保护的
方法的行为可能很有用

这方面的问题是


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

我想现在可以使用此功能,但为什么?您可以始终使用
Foo.new.Foo
Foo.new.Foo
进行定义。例如,使用类似于
getter:foo
的东西。我认为这更像是一个问题。如果您想保持代码的兼容性,通常不应该使用未记录的特性。它可能会在标准库中保留一段时间,直到某些东西得到修复,并且库将依赖于适当的机制。它还用于自动定义结构相等性。如果你愿意,你基本上可以使用它,但不推荐使用。通常应该使用getter。