الفرق بين المراجعتين ل"Ruby/InstructionSequence/disassemble"

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

مراجعة 21:52، 1 نوفمبر 2018

يأخذ التابع disassemble الوسيط body (انظر فقرة البنية العامة)، والذي سيكون إما كائنًا من النوع Method، أو من النوع Proc، ثم يُعيد سلسلة نصية تحتوي body على هيئة تعليمات قابلة للقراءة.

البنية العامة

disasm(body)  str
disassemble(body)  str

المعاملات

body‎

كائن.

القيمة المُعادة

يُعيد سلسلة نصية تحتوي 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: يأخذ الكائن body ، الذي يمكن أن يكون من النوع (Method) أو من النوع Proc ، ويعيد سلسلة نصية (String) تحتوي body على هيئة تعليمات قابلة للقراءة.

مصادر