ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量?

标签 ruby-on-rails ruby

我正在查看 instance_variable_set 的文档并看到给出的示例代码是这样做的:

obj.instance_variable_set(:@instnc_var, "value for the instance variable")

然后允许您在类的任何实例方法中以@instnc_var 的形式访问该变量。

我想知道为什么在@instnc_var 之前需要一个冒号:。冒号有什么作用?

最佳答案

我的第一直觉是告诉你不要使用 instance_variable_set 除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击。

也就是说,如果该变量没有 setter ,您可以使用 instance_variable_set 来设置它无论如何。如果您控制代码只创建一个 setter,那就更好了。

尝试查看 accessors满足绝大多数实例变量设置需求。它们是一种“免费”为您的实例变量提供 getter 和 setter 的惯用方法,您无需编写这些函数。

如果您确实需要 instance_variable_set,它允许第一个参数是 symbol这是要设置的实例变量的名称。冒号是 Ruby 语言的一部分,类似于“符号文字”:当您键入 :foo 时,您已经创建了一个值为 foo 的符号,就像您键入 "bar 时一样" 直接在您的代码中创建一个值为“bar”的字符串文字。

关于ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12505289/

相关文章:

mysql - 从另一个表模型 rails 更新另一个表的列

ruby-on-rails - Rails 4 嵌套表单 has_many 通过关联和数据库

ruby-on-rails - OpenID 支持 Ruby on Rails 应用程序

ruby-on-rails - Vagrant 工作流程 - vagrant ssh、vagrant destroy、vagrant up 命令

css - rails : Embed child in submit_tag

ruby - Bundler 1.2.0 ruby​​ 版本检查是否不需要基本的 .rvmrc 文件?

ruby-on-rails - 在没有外部依赖的情况下像 New Relic 一样在本地测量 Rails 性能

jquery - Rails accepts_nested_attributes_for 与 f.fields_for 和 AJAX

ruby-on-rails - Rails Content_for/yield 问题 - 重复内容

ruby-on-rails - Ruby Iconv 可与 irb 和 ruby​​ 调试器一起使用,但不能用于单元测试