ruby –dump中显示的信息是否在运行时可用?
发布时间:2020-12-17 02:19:22 所属栏目:百科 来源:网络整理
导读:在 10 Things You Didn’t Know Ruby Could Do,幻灯片30,詹姆斯爱德华格雷二世提到 ruby -e 'puts { is_this_a_block }' --dump parsetree 哪个产生 ############################################################# Do NOT use this node dump for any purp
在
10 Things You Didn’t Know Ruby Could Do,幻灯片30,詹姆斯爱德华格雷二世提到
ruby -e 'puts { is_this_a_block }' --dump parsetree 哪个产生 ########################################################### ## Do NOT use this node dump for any purpose other than ## ## debug and research. Compatibility is not guaranteed. ## ########################################################### # @ NODE_SCOPE (line: 1) # +- nd_tbl: (empty) # +- nd_args: # | (null node) # +- nd_body: # @ NODE_ITER (line: 1) # +- nd_iter: # | @ NODE_FCALL (line: 1) # | +- nd_mid: :puts # | +- nd_args: # | (null node) # +- nd_body: # @ NODE_SCOPE (line: 1) # +- nd_tbl: (empty) # +- nd_args: # | (null node) # +- nd_body: # @ NODE_VCALL (line: 1) # +- nd_mid: :is_this_a_block 此处输出的信息是否在运行时可用?如果是这样,信息是仅仅代表已经写下的代码,还是它还具有已经完成的任何元编程的结果? 解决方法
是的.您可以使用
Ripper gem(包含MRI 1.9开箱即用)为给定的代码字符串生成AST(抽象语法树)(通过Ripper.sexp).但是,由于MRI 1.9中的体系结构更改,一旦您的代码被解析并转换为YARV字节码,原始源和AST都将被丢弃,您将无法再获取此信息.但是,如果您将通过元编程生成的任何代码放入Ripper.sexp中,您可以获得结果的AST.您还可以使用JEG2演讲中显示的一些其他技巧来解析源文件并为其生成AST(尽管任何元编程代码都不会被解析,因为它还不存在).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |