الفرق بين المراجعتين ل"Ruby/InstructionSequence/disassemble"
< Ruby | InstructionSequence
اذهب إلى التنقل
اذهب إلى البحث
جميل-بيلوني (نقاش | مساهمات) ط (مراجعة وتدقيق.) |
|||
سطر 1: | سطر 1: | ||
− | <noinclude>{{DISPLAYTITLE: التابع <code>disassemble | + | <noinclude>{{DISPLAYTITLE: التابع <code>InstructionSequence.disassemble</code> في روبي}}</noinclude> |
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby InstructionSequence]] | [[تصنيف: Ruby InstructionSequence]] | ||
− | يأخذ التابع <code>disassemble</code> | + | يأخذ التابع <code>disassemble</code> المعامل <code>body</code>، والذي سيكون إما كائنًا من النوع <code>[[Ruby/Method|Method]]</code>، أو من النوع <code>[[Ruby/Proc|Proc]]</code>، ثم يُعيد سلسلة نصية تحوي هذا المعامل على هيئة تعليمات قابلة للقراءة. |
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">disasm(body) → str | <syntaxhighlight lang="ruby">disasm(body) → str | ||
سطر 9: | سطر 9: | ||
==المعاملات== | ==المعاملات== | ||
===<code>body</code>=== | ===<code>body</code>=== | ||
− | كائن. | + | كائن من النوع <code>[[Ruby/Method|Method]]</code> أو من النوع <code>[[Ruby/Proc|Proc]]</code>. |
− | ==القيمة | + | ==القيمة المعادة== |
− | + | تعاد سلسلة نصية تحوي محتوى المعامل <code>body</code> على هيئة تعليمات قابلة للقراءة. | |
==أمثلة== | ==أمثلة== | ||
− | |||
− | |||
مثال على استخدام التابع <code>disassemble</code> مع كائن من النوع <code>[[Ruby/Method|Method]]</code>:<syntaxhighlight lang="ruby"># /tmp/method.rb | مثال على استخدام التابع <code>disassemble</code> مع كائن من النوع <code>[[Ruby/Method|Method]]</code>:<syntaxhighlight lang="ruby"># /tmp/method.rb | ||
def hello | def hello | ||
puts "hello, world" | puts "hello, world" | ||
end | end | ||
− | puts RubyVM::InstructionSequence.disasm(method(:hello))</syntaxhighlight>الناتج سيكون:<syntaxhighlight lang=" | + | puts RubyVM::InstructionSequence.disasm(method(:hello))</syntaxhighlight>الناتج سيكون:<syntaxhighlight lang="text">== disasm: <RubyVM::InstructionSequence:hello@/tmp/method.rb>============ |
0000 trace 8 ( 1) | 0000 trace 8 ( 1) | ||
0002 trace 1 ( 2) | 0002 trace 1 ( 2) | ||
سطر 28: | سطر 26: | ||
0007 send :puts, 1, nil, 8, <ic:0> | 0007 send :puts, 1, nil, 8, <ic:0> | ||
0013 trace 16 ( 3) | 0013 trace 16 ( 3) | ||
− | 0015 leave ( 2)</syntaxhighlight> | + | 0015 leave ( 2)</syntaxhighlight>مثال على استخدام التابع <code>disassemble</code> مع تمرير كائن من النوع <code>[[Ruby/Proc|Proc]]</code> إليه:<syntaxhighlight lang="ruby"># /tmp/proc.rb |
− | |||
− | |||
− | مثال على استخدام التابع <code>disassemble</code>كائن <code>Proc</code>:<syntaxhighlight lang="ruby"># /tmp/proc.rb | ||
p = proc { num = 1 + 2 } | p = proc { num = 1 + 2 } | ||
− | puts RubyVM::InstructionSequence.disasm(p)</syntaxhighlight>الناتج:<syntaxhighlight lang=" | + | puts RubyVM::InstructionSequence.disasm(p)</syntaxhighlight>الناتج سيكون:<syntaxhighlight lang="text">== disasm: <RubyVM::InstructionSequence:block in <main>@/tmp/proc.rb>=== |
== catch table | == catch table | ||
| catch type: redo st: 0000 ed: 0012 sp: 0000 cont: 0000 | | catch type: redo st: 0000 ed: 0012 sp: 0000 cont: 0000 | ||
سطر 48: | سطر 43: | ||
0012 leave</syntaxhighlight> | 0012 leave</syntaxhighlight> | ||
− | == انظر | + | == انظر أيضًا == |
− | *التابع <code>[[Ruby/InstructionSequence/disasm|disasm]]</code>: يأخذ | + | *التابع <code>[[Ruby/InstructionSequence/disasm|disasm]]</code>: يأخذ كائنًا يمكن أن يكون من النوع <code>[[Ruby/Method|Method]]</code> أو من النوع <code>[[Ruby/Proc|Proc]]</code> ويعيد سلسلة نصية تعليمات قابلة للقراءة لهذا المعامل المعطى. |
==مصادر== | ==مصادر== | ||
− | *[http://ruby-doc.org/core-2.5.1/RubyVM/InstructionSequence.html#method-i-disassemble قسم | + | *[http://ruby-doc.org/core-2.5.1/RubyVM/InstructionSequence.html#method-i-disassemble قسم التابع disassemble في الصنف InstructionSequence في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 06:57، 4 ديسمبر 2018
يأخذ التابع disassemble
المعامل body
، والذي سيكون إما كائنًا من النوع Method
، أو من النوع Proc
، ثم يُعيد سلسلة نصية تحوي هذا المعامل على هيئة تعليمات قابلة للقراءة.
البنية العامة
disasm(body) → str
disassemble(body) → str
المعاملات
body
كائن من النوع Method
أو من النوع Proc
.
القيمة المعادة
تعاد سلسلة نصية تحوي محتوى المعامل body
على هيئة تعليمات قابلة للقراءة.
أمثلة
مثال على استخدام التابع disassemble
مع كائن من النوع 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)
مثال على استخدام التابع disassemble
مع تمرير كائن من النوع 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
انظر أيضًا
- التابع
disasm
: يأخذ كائنًا يمكن أن يكون من النوعMethod
أو من النوعProc
ويعيد سلسلة نصية تعليمات قابلة للقراءة لهذا المعامل المعطى.