"Hello" 顺序无关紧要,只要我能实现该消息即可。 最佳答案 不,没有直接的方法-6ren">
gpt4 book ai didi

ruby - 刚刚分配的变量是否有 ruby 钩子(Hook)?

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:44 27 4
gpt4 key购买 nike

这是我理想中想要的。用户做:

a="hello"

输出为

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

顺序无关紧要,只要我能实现该消息即可。

最佳答案

不,没有直接的方法可以做到这一点,因为在执行代码之前,Ruby 字节码编译器会丢弃局部变量名。

YARV(MRI 1.9.2 中使用的 Ruby VM)提供的关于局部变量的唯一指令是 getlocalsetlocal,它们都对整数索引进行操作,而不是变量名。以下是 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 的回答)以在设置局部变量时通知您,但没有任何高级方法可以做到这一点,如果不深入解释器内部,您可能无法检索这些局部变量的名称。

关于ruby - 刚刚分配的变量是否有 ruby 钩子(Hook)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com