الفرق بين المراجعتين لصفحة: «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
على هيئة تعليمات قابلة للقراءة.