最近在学习ror,请问ror如何实现动态访问类的全部实例变量并传递给erb页面访问的?
在struts2中好理解,因为有getter,setter和反射,那么ruby里的instance var 默认是private,而且我没有设定访问器
难道是动态添加方法,在new的时候生成一个处理template的code block?我还在学习中,能不能先点拨一下?
[b]问题补充:[/b]
请问这个过程是如何实现的?
[b]问题补充:[/b]
首先谢谢你的热心,但是你并没有回答我的问题,我的问题不是能不能或者在rails中怎么用,而是为什么可以这样用,这样用的实现的原理是什么。因为类实例变量默认是私有的,ruby是怎样动态获取到这些值并传递给view的,或者它的反射可以直接访问私有变量?不知道我说明白没有。
Agile Web D with Rails 3rd 的第一个magic
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- xenocide 2009-03-11 20:33关注
呵呵,这个问题很简单:
假设这个controller的实例是c
假设ERB运行的binding(运行环境)对象为o(这个o一般都是从一个白白净净的Object.new开始的)magic就在下面的三个方法之中:
c.instance_variables
得到所有实例变量的名称,为一数组c.instance_variable_get :@var1
得到实例变量@var1的值o.instance_variable_set :@var1, '12'
设置o的实例变量@var1 = '12'可能我们还需要设置一些局部变量:
o.instance_eval 'a=1'最后渲染:
ERB.result(o.__send__ :binding)
因为binding函数是私有的,所以用__send__调用得到o的binding本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 phython路径名过长报错 不知道什么问题
- ¥15 深度学习中模型转换该怎么实现
- ¥15 HLs设计手写数字识别程序编译通不过
- ¥15 Stata外部命令安装问题求帮助!
- ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
- ¥15 TYPCE母转母,插入认方向
- ¥15 如何用python向钉钉机器人发送可以放大的图片?
- ¥15 matlab(相关搜索:紧聚焦)
- ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
- ¥15 Arduino无法同时连接多个hx711模块,如何解决?