加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

是否有刚刚分配的变量的ruby钩子?

发布时间:2020-12-17 03:53:12 所属栏目:百科 来源:网络整理
导读:这是我理想的样子.用户: a="hello" 输出将是 You just allocated "a" ! = "Hello" 只要我能使消息发生,订单就无关紧要了. 解决方法 不,没有直接的方法来实现这一点,因为在执行代码之前,Ruby字节码编译器会丢弃局部变量名. YARV(MRI 1.9.2中使用的Ruby VM)提
这是我理想的样子.用户:

a="hello"

输出将是

You just allocated "a" !
 => "Hello"

只要我能使消息发生,订单就无关紧要了.

解决方法

不,没有直接的方法来实现这一点,因为在执行代码之前,Ruby字节码编译器会丢弃局部变量名.

YARV(MRI 1.9.2中使用的Ruby VM)提供的唯一指令是局部变量getlocal和setlocal,它们都是对整数指标而不是变量名进行操作.以下是1.9.2源代码中insns.def的摘录:

/**********************************************************/
/* deal with variables                                    */
/**********************************************************/

/**
  @c variable
  @e get local variable value (which is pointed by idx).
  @j idx 
 */
DEFINE_INSN
getlocal
(lindex_t idx)
()
(VALUE val)
{
    val = *(GET_LFP() - idx);
}

/**
  @c variable
  @e set local variable value (which is pointed by idx) as val.
  @j idx 
 */
DEFINE_INSN
setlocal
(lindex_t idx)
(VALUE val)
()
{
    (*(GET_LFP() - idx)) = val;
}

有可能破解MRI源(或使用set_trace_func并潜入Binding对象 – 请参阅sarnold的答案),以便在设置局部变量时通知您,但是没有任何高级方法可以做到这一点如果不深入解释器内部,将无法检索这些局部变量的名称.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读