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 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)