yang1vip 2009-03-11 14:23
浏览 387
已采纳

Agile Web D with Rails 3rd 的第一个magic

最近在学习ror,请问ror如何实现动态访问类的全部实例变量并传递给erb页面访问的?
在struts2中好理解,因为有getter,setter和反射,那么ruby里的instance var 默认是private,而且我没有设定访问器
难道是动态添加方法,在new的时候生成一个处理template的code block?我还在学习中,能不能先点拨一下?
[b]问题补充:[/b]
请问这个过程是如何实现的?
[b]问题补充:[/b]
首先谢谢你的热心,但是你并没有回答我的问题,我的问题不是能不能或者在rails中怎么用,而是为什么可以这样用,这样用的实现的原理是什么。因为类实例变量默认是私有的,ruby是怎样动态获取到这些值并传递给view的,或者它的反射可以直接访问私有变量?不知道我说明白没有。

  • 写回答

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?