الفرق بين المراجعتين لصفحة: «Ruby/InstructionSequence/disasm»

من موسوعة حسوب
لا ملخص تعديل
لا ملخص تعديل
سطر 10: سطر 10:
===<code>body‎</code>===
===<code>body‎</code>===
كائن من النوع (<code>[[Ruby/Method|Method]]</code>) أو من النوع <code>[[Ruby/Proc|Proc]]</code>.
كائن من النوع (<code>[[Ruby/Method|Method]]</code>) أو من النوع <code>[[Ruby/Proc|Proc]]</code>.
==القيمة المُعادة==
==القيمة المُعادة==
يعيد سلسلة نصية تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة.
يعيد سلسلة نصية تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة.
==أمثلة==
==أمثلة==
 
===المثال الأول===
=== المثال الأول ===
مثال على استخدام التابع <code>disasm‎</code> مع كائن <code>[[Ruby/Method|Method]]</code>:<syntaxhighlight lang="ruby"># /tmp/method.rb
مثال على استخدام التابع <code>disasm‎</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>
puts RubyVM::InstructionSequence.disasm(method(:hello))</syntaxhighlight>الناتج سيكون:<syntaxhighlight lang="ruby">== disasm: <RubyVM::InstructionSequence:hello@/tmp/method.rb>============
الناتج سيكون:<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)
سطر 32: سطر 27:
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
مثال على استخدام التابع <code>disasm‎</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>
puts RubyVM::InstructionSequence.disasm(p)</syntaxhighlight>الناتج سيكون:<syntaxhighlight lang="ruby">== disasm: <RubyVM::InstructionSequence:block in <main>@/tmp/proc.rb>===
الناتج سيكون:<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
سطر 52: سطر 46:
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:53، 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 على هيئة تعليمات قابلة للقراءة.

مصادر