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

مصادر