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

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>disasm‎</code> الخاص بالصنف <code>InstructionSequence</code> في روبي}}</noinclude> تصنيف: Ruby...'
 
ط مراجعة وتدقيق.
 
(مراجعتان متوسطتان بواسطة مستخدم واحد آخر غير معروضتين)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>disasm‎</code> الخاص بالصنف <code>InstructionSequence</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: التابع <code>InstructionSequence.disasm‎</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: 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>[[Ruby/Method|Method]]</code> أو من النوع <code>[[Ruby/Proc|Proc]]</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> على هيئة تعليمات قابلة للقراءة.
==أمثلة==
مثال على استخدام التابع <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="text">== 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)
سطر 14: سطر 25:
0007 send            :puts, 1, nil, 8, <ic:0>
0007 send            :puts, 1, nil, 8, <ic:0>
0013 trace            16                                              (  3)
0013 trace            16                                              (  3)
0015 leave                                                            (  2)‎</syntaxhighlight>
0015 leave                                                            (  2)‎</syntaxhighlight>مثال آخر على استخدام التابع <code>disasm‎</code>مع الكائن <code>[[Ruby/Proc|Proc]]</code> إليه:<syntaxhighlight lang="ruby"># /tmp/proc.rb
وبالنسبة لكائن Proc:
p = proc { num = 1 + 2 }
 
puts RubyVM::InstructionSequence.disasm(p)</syntaxhighlight>الناتج سيكون:<syntaxhighlight lang="text">== 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
سطر 32: سطر 41:
0009 setlocal        num, 0
0009 setlocal        num, 0
0012 leave‎</syntaxhighlight>
0012 leave‎</syntaxhighlight>
==البنية العامة==
==انظر أيضًا==
<syntaxhighlight lang="ruby">disasm(body) → str
*التابع <code>[[Ruby/InstructionSequence/disassemble|disassemble]]</code>: يأخذ المعامل <code>body</code>، والذي سيكون إما كائنًا من النوع <code>[[Ruby/Method|Method]]</code>، أو من النوع <code>[[Ruby/Proc|Proc]]</code>، ثم يُعيد سلسلة نصية تحوي هذا المعامل على هيئة تعليمات قابلة للقراءة.
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> على هيئة تعليمات قابلة للقراءة.
 
==مصادر==
==مصادر==
*[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‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 06:57، 4 ديسمبر 2018

يأخذ التابع disasm كائنًا يمكن أن يكون من النوع Method أو من النوع Proc ويعيد سلسلة نصية تعليمات قابلة للقراءة لهذا المعامل المعطى.

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

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، ثم يُعيد سلسلة نصية تحوي هذا المعامل على هيئة تعليمات قابلة للقراءة.

مصادر