Kev*_*tre 7 ruby ruby-on-rails
只是好奇Rails gem中这两者之间的区别:
write_inheritable_attribute(:sample, "sample")
self.sample = "sample"
Run Code Online (Sandbox Code Playgroud)
我找不到任何好的文档write_inheritable_attribute,只是阅读一些宝石源,发现前者使用了几次.谢谢!
Jos*_*uez 13
子类不继承实例变量:
>> class B ; @candy = 1 ; end
>> B.instance_variable_get :@candy # => 1
>> class C < B ; end
>> C.instance_variable_get :@candy # => nil
Run Code Online (Sandbox Code Playgroud)
在rails中,可继承属性提供了一个解决方案:
>> class B ; end
>> B.write_inheritable_attribute(:candy, 7) # => 7
>> class C < B ; end
>> C.read_inheritable_attribute(:candy) # => 7
Run Code Online (Sandbox Code Playgroud)
对于一个简单的类或模块,没有区别,但是对于可以加载多个其他模块的更复杂的模块,类似的方法write_inheritable_attribute可以帮助您轻松可靠地修改对象,而不必担心范围,私有/受保护的方法以及来自红宝石元编程魔法的各种干扰method_missing.
简而言之,当您编写时foo.sample = "sample",可能会在设置属性之前,之后或之后发生各种事情,尤其是在对象使用ActiveModel或ORM时.当你使用时,foo.write_inheritable_attribute(:sample, "sample")你可以更好地控制发生的事情.
| 归档时间: |
|
| 查看次数: |
1429 次 |
| 最近记录: |