当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby InstructionSequence.disasm用法及代码示例


本文简要介绍ruby语言中 RubyVM::InstructionSequence.disasm 的用法。

用法

disasm(body) → str
disassemble(body) → str

接受 body Method Proc 对象,并返回 String 以及 body 的人类可读指令。

对于 Method 对象:

# /tmp/method.rb
def hello
  puts "hello, world"
end

puts RubyVM::InstructionSequence.disasm(method(:hello))

产生:

== disasm: <RubyVM::InstructionSequence:hello@/tmp/method.rb>============
0000 trace            8                                               (   1)
0002 trace            1                                               (   2)
0004 putself
0005 putstring        "hello, world"
0007 send             :puts, 1, nil, 8, <ic:0>
0013 trace            16                                              (   3)
0015 leave                                                            (   2)

对于一个过程:

# /tmp/proc.rb
p = proc { num = 1 + 2 }
puts RubyVM::InstructionSequence.disasm(p)

产生:

== disasm: <RubyVM::InstructionSequence:block in <main>@/tmp/proc.rb>===
== catch table
| catch type: redo   st: 0000 ed: 0012 sp: 0000 cont: 0000
| catch type: next   st: 0000 ed: 0012 sp: 0000 cont: 0012
|------------------------------------------------------------------------
local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 2] num
0000 trace            1                                               (   1)
0002 putobject        1
0004 putobject        2
0006 opt_plus         <ic:1>
0008 dup
0009 setlocal         num, 0
0012 leave

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 InstructionSequence.disasm。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。