الفرق بين المراجعتين لصفحة: «Ruby/InstructionSequence/disasm»
< Ruby | InstructionSequence
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>disasm</code> الخاص بالصنف <code>InstructionSequence</code> في روبي}}</noinclude> تصنيف: Ruby...' |
لا ملخص تعديل |
||
| سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby InstructionSequence]] | [[تصنيف: Ruby InstructionSequence]] | ||
يأخذ التابع <code>disasm</code> الكائن <code>body</code> (انظر فقرة البنية العامة)، الذي يمكن أن يكون من النوع (<code>[[Ruby/Method|Method]]</code>) أو من النوع <code>[[Ruby/Proc|Proc]]</code> ، ويعيد سلسلة نصية (<code>[[Ruby/ | يأخذ التابع <code>disasm</code> الكائن <code>body</code> (انظر فقرة البنية العامة)، الذي يمكن أن يكون من النوع (<code>[[Ruby/Method|Method]]</code>) أو من النوع <code>[[Ruby/Proc|Proc]]</code> ، ويعيد سلسلة نصية تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة. | ||
==البنية العامة== | |||
<syntaxhighlight lang="ruby">disasm(body) → str | |||
disassemble(body) → str</syntaxhighlight> | |||
==المعاملات== | |||
===<code>body</code>=== | |||
كائن من النوع (<code>[[Ruby/Method|Method]]</code>) أو من النوع <code>[[Ruby/Proc|Proc]]</code>. | |||
==القيمة المُعادة== | |||
يعيد سلسلة نصية تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة. | |||
==أمثلة== | |||
الناتج: | === المثال الأول === | ||
<syntaxhighlight lang="ruby">== disasm: <RubyVM::InstructionSequence:hello@/tmp/method.rb>============ | مثال على استخدام التابع <code>disasm</code> مع كائن <code>[[Ruby/Method|Method]]</code>: | ||
<syntaxhighlight lang="ruby"># /tmp/method.rb | |||
def hello | |||
puts "hello, world" | |||
end | |||
puts RubyVM::InstructionSequence.disasm(method(:hello))</syntaxhighlight> | |||
الناتج سيكون:<syntaxhighlight lang="ruby">== disasm: <RubyVM::InstructionSequence:hello@/tmp/method.rb>============ | |||
0000 trace 8 ( 1) | 0000 trace 8 ( 1) | ||
0002 trace 1 ( 2) | 0002 trace 1 ( 2) | ||
| سطر 15: | سطر 32: | ||
0013 trace 16 ( 3) | 0013 trace 16 ( 3) | ||
0015 leave ( 2)</syntaxhighlight> | 0015 leave ( 2)</syntaxhighlight> | ||
المثال الثاني | |||
الناتج سيكون: | مثال على استخدام التابع <code>disasm</code>مع كائن <code>Proc</code>:<syntaxhighlight lang="ruby"># /tmp/proc.rb | ||
<syntaxhighlight lang="ruby">== disasm: <RubyVM::InstructionSequence:block in <main>@/tmp/proc.rb>=== | p = proc { num = 1 + 2 } | ||
puts RubyVM::InstructionSequence.disasm(p)</syntaxhighlight> | |||
الناتج سيكون:<syntaxhighlight lang="ruby">== 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 | ||
| سطر 32: | سطر 51: | ||
0009 setlocal num, 0 | 0009 setlocal num, 0 | ||
0012 leave</syntaxhighlight> | 0012 leave</syntaxhighlight> | ||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/InstructionSequence/disassemble|disassemble]]</code>: يأخذ الوسيط <code>body</code> ، والذي سيكون إما كائنًا من النوع <code>[[Ruby/Method|Method]]</code>، أو من النوع <code>[[Ruby/Proc|Proc]]</code>، ثم يُعيد سلسلة نصية (<code>[[Ruby/String|String]]</code>) تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة. | * التابع <code>[[Ruby/InstructionSequence/disassemble|disassemble]]</code>: يأخذ الوسيط <code>body</code> ، والذي سيكون إما كائنًا من النوع <code>[[Ruby/Method|Method]]</code>، أو من النوع <code>[[Ruby/Proc|Proc]]</code>، ثم يُعيد سلسلة نصية (<code>[[Ruby/String|String]]</code>) تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة. | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/RubyVM/InstructionSequence.html#method-i-disasm قسم التابع disasm في الصنف InstructionSequence في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/RubyVM/InstructionSequence.html#method-i-disasm قسم التابع disasm في الصنف InstructionSequence في توثيق روبي الرسمي.] | ||
مراجعة 21:47، 1 نوفمبر 2018
يأخذ التابع disasm الكائن body (انظر فقرة البنية العامة)، الذي يمكن أن يكون من النوع (Method) أو من النوع Proc ، ويعيد سلسلة نصية تحتوي body على هيئة تعليمات قابلة للقراءة.
البنية العامة
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، ثم يُعيد سلسلة نصية (String) تحتويbodyعلى هيئة تعليمات قابلة للقراءة.