التابع InstructionSequence.disasm في روبي
< Ruby | InstructionSequence
يأخذ التابع disasm كائنًا يمكن أن يكون من النوع Method أو من النوع Proc ويعيد سلسلة نصية تعليمات قابلة للقراءة لهذا المعامل المعطى.
البنية العامة
disasm(body) → str
disassemble(body) → str
المعاملات
body
كائن من النوع Method أو من النوع Proc.
القيمة المعادة
تعاد سلسلة نصية تحوي المعامل body على هيئة تعليمات قابلة للقراءة.
أمثلة
مثال على استخدام التابع disasm مع تمرير الكائن 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)
مثال آخر على استخدام التابع disasmمع الكائن Proc إليه:
# /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
انظر أيضًا
- التابع
disassemble: يأخذ المعاملbody، والذي سيكون إما كائنًا من النوعMethod، أو من النوعProc، ثم يُعيد سلسلة نصية تحوي هذا المعامل على هيئة تعليمات قابلة للقراءة.