【发布时间】:2011-10-09 22:30:36
【问题描述】:
当我使用某个名称(例如 @foo)设置或获取实例变量时,我可以执行以下操作:
instance_variable_set("@foo", some_value)
...
instance_variable_get("@foo")
但通常,我使用一个变量作为方法名称,它不包含@ 前缀,所以我最终会这样做:
方法 = :foo
...
instance_variable_set("@#{method}", some_value)
...
instance_variable_get("@#{方法}")
但由于所有实例变量都以@ 为前缀,我认为必须输入"@#{method}" 而不是简单地输入method 是多余的。为什么 instance_variable_set 和 instance_variable_get 方法不能接受没有 @ 作为第一个参数的字符串/符号,如下所示:
方法 = :foo
...
instance_variable_set(method, some_value)
...
instance_variable_get(方法)
实际设置的变量是@foo,而不是foo?
这种方式有什么优势吗?
【问题讨论】:
-
使用
instance_variable_(get|set)不是代码味道吗? -
:"hello?"是一个有效的符号 - 它是一个有效的变量名吗? -
@Grimm。它不是。我的问题是,为什么它没有设计为自动在字符串/符号前加上“@”。我添加了示例以使我的问题更清楚。
-
如果有一些有效的符号会被转换成无效的实例变量名,这可能是一个原因吗?
-
@Grimm 我想过,但如果它总是在没有
@的情况下使用,那么就没有问题了。我想知道为什么它不能像attr_(accessor|reader|writer),你不放@。
标签: ruby