簡體   English   中英

ruby --dump中顯示的信息是否在運行時可用?

[英]Is the information displayed in ruby --dump available at runtime?

你不知道Ruby可能做的10件事中 ,滑動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(盡管任何元編程代碼都不會被解析,因為它還不存在)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM