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

من موسوعة حسوب
أنشأ الصفحة ب'<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/String|String]]</code>) تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة.
يأخذ التابع <code>disasm</code> الكائن <code>body</code> (انظر فقرة البنية العامة)، الذي يمكن أن يكون من النوع (<code>[[Ruby/Method|Method]]</code>) أو من النوع <code>[[Ruby/Proc|Proc]]</code> ، ويعيد سلسلة نصية تحتوي <code>body</code> على هيئة تعليمات قابلة للقراءة.
بالنسبة لكائن <code>[[Ruby/Method|Method]]</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>
وبالنسبة لكائن Proc:
المثال الثاني


الناتج سيكون:
مثال على استخدام التابع <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>
==البنية العامة==
<syntaxhighlight lang="ruby">disasm(body) → str
disassemble(body) → str‎</syntaxhighlight>
==المعاملات==
===<code>body‎</code>===
==القيمة المُعادة==
==أمثلة==
مثال على استخدام التابع <code>disasm‎</code>:
<syntaxhighlight lang="ruby"># /tmp/method.rb
def hello
  puts "hello, world"
end
puts RubyVM::InstructionSequence.disasm(method(:hello))‎</syntaxhighlight>
==انظر أيضا==
==انظر أيضا==
* التابع <code>[[Ruby/InstructionSequence/base_label|base_label]]</code>: يُعيد  التسمية الأساسية (base label) لككك التي .
* التابع <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 على هيئة تعليمات قابلة للقراءة.

مصادر