Latest web development tutorials
×

Ruby หลักสูตร

Ruby หลักสูตร Ruby แนะนำโดยย่อ Ruby สิ่งแวดล้อม Ruby ติดตั้ง Linux Ruby ติดตั้ง Windows Ruby การเข้ารหัสจีน Ruby เลือกบรรทัดคำสั่ง Ruby ตัวแปรสภาพแวดล้อม Ruby ไวยากรณ์ Ruby ชนิดข้อมูล Ruby คลาสและวัตถุ Ruby กรณีระดับ Ruby ตัวแปร Ruby ผู้ประกอบการ Ruby หมายเหตุ Ruby เงื่อนไข Ruby การไหลเวียน Ruby ทาง Ruby กลุ่ม Ruby โมดูล Ruby เชือก Ruby แถว Ruby กัญชา Ruby วันที่และเวลา Ruby ขอบเขต Ruby iterator Ruby input และ output ไฟล์ Ruby File ชั้นเรียนและวิธี Ruby Dir ชั้นเรียนและวิธี Ruby ผิดปกติ

Ruby การสอนที่ทันสมัย

Ruby เชิงวัตถุ Ruby นิพจน์ปกติ Ruby การเข้าถึงฐานข้อมูล - DBI หลักสูตร Ruby MySQL Ruby CGI โครงการ Ruby CGI ทาง Ruby CGI Cookies Ruby CGI Sessions Ruby ส่ง Email SMTP Ruby Socket โครงการ Ruby XML, XSLT, XPath Ruby Web Services Ruby multithreading Ruby JSON Ruby RubyGems

โมดูลทับทิม (Module)

Module (Module) เป็นวิธีการวิธีการเรียนและค่าคงที่รวมลักษณะ Module (Module) ให้คุณมีสองประโยชน์

  • โมดูลให้namespaceและป้องกันความขัดแย้งชื่อ
  • โมดูลใช้อุปกรณ์mixin

Module (โมดูล) กำหนด namespace ที่เทียบเท่าของ sandbox วิธีการและค่าคงที่ของคุณจะไม่คงที่และวิธีการของความขัดแย้งที่อื่น ๆ อยู่ในนั้น

คลาสโมดูลที่คล้ายกัน แต่มีลักษณะที่แตกต่างกัน

  • โมดูลไม่สามารถ instantiated
  • โมดูลไม่มี subclasses
  • โมดูลเท่านั้นที่สามารถกำหนดโดยโมดูลอื่น

ไวยากรณ์

module Identifier
   statement1
   statement2
   ...........
end

โมดูลชื่อค่าคงที่และค่าคงที่ระดับชื่อเดียวเริ่มต้นด้วยอักษรตัวใหญ่ นิยามวิธีที่ดูเหมือนว่า: วิธีการแบบแยกที่คล้ายกันในการกำหนดคำจำกัดความของวิธีการเรียน

ผ่านวิธีการเรียนที่คุณสามารถวางชื่อโมดูลและจุดในด้านหน้าของชื่อชั้นของวิธีการที่จะเรียกวิธีการแบบแยกคุณสามารถใช้ชื่อโมดูลและสองทวิภาคการอ้างอิงค่าคงที่

ตัวอย่าง

#!/usr/bin/ruby

# 定义在 trig.rb 文件中的模块

module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

เราสามารถกำหนดหลายฟังก์ชันที่มีชื่อเดียวกัน แต่โมดูลการทำงานที่แตกต่างกัน

#!/usr/bin/ruby

# 定义在 moral.rb 文件中的模块

module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   end
end

เช่นเดียวกับวิธีการเรียนเมื่อคุณกำหนดวิธีการในโมดูลคุณสามารถระบุชื่อโมดูลตามด้วยจุดหลังจากจุดตามด้วยชื่อวิธีการ

ทับทิมต้องใช้คำสั่ง

จำเป็นต้องมีคำสั่งคล้ายกับ C และ C ++ และรวมถึงงบในงบนำเข้า Java ถ้าโปรแกรมของบุคคลที่สามที่คุณต้องการใช้ใด ๆของโมดูลที่ได้รับการกำหนดไว้คุณก็สามารถใช้ทับทิมจำเป็นต้องมีคำสั่งให้โหลดไฟล์โมดูล:

ไวยากรณ์

require filename

นี่นามสกุลของไฟล์ไม่.rb ต้อง

ตัวอย่าง

$ LOAD_PATH << '.'

จำเป็นต้องมี 'trig.rb'
จำเป็นต้องมี 'คุณธรรม'

Y = Trig.sin (หนุน :: PI / 4)
การกระทำผิดกฎหมาย = Moral.sin (คุณธรรม :: VERY_BAD)

ที่นี่เราใช้$ LOAD_PATH << '.' Let ทับทิมรู้ว่าเราจะต้องค้นหาแฟ้มที่ถูกอ้างอิงในไดเรกทอรีปัจจุบันหากคุณไม่ต้องการที่จะใช้ $ LOAD_PATH คุณสามารถใช้เพื่อการอ้างอิงrequire_relative ไฟล์จากไดเรกทอรีญาติ

หมายเหตุ: ที่นี่ไฟล์มีชื่อฟังก์ชันเดียวกันดังนั้นนี้จะนำไปสู่ความสับสนเมื่อพูดถึงโปรแกรมที่เรียกโมดูล แต่หลีกเลี่ยงการ obfuscation รหัสนี้และเราสามารถใช้ชื่อของโมดูลที่จะเรียกฟังก์ชั่นที่เหมาะสม

ทับทิมรวมถึงคำสั่ง

คุณสามารถฝังโมดูลในชั้นเรียนเพื่อฝังในโมดูลชั้นคุณสามารถใช้รวมถึงแถลงการณ์ในชั้นเรียนของคุณ:

ไวยากรณ์

include modulename

ถ้าโมดูลจะกำหนดไว้ในแฟ้มต่างหากดังนั้นก่อนที่คุณจะต้องใช้โมดูลฝังตัวต้องใช้งบอ้างอิงไฟล์

ตัวอย่าง

สมมติว่าโมดูลดังต่อไปเขียนในไฟล์support.rb

module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   end
end

ตอนนี้คุณสามารถอ้างอิงโมดูลในชั้นเรียนดังนี้

#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"

class Decade
include Week
   no_of_yrs=10
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   end
end
d1=Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

นี้ก่อให้เกิดผลลัพธ์ต่อไปนี้:

Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

ทับทิมใน Mixins

ก่อนที่จะอ่านส่วนนี้คุณจะต้องมีความเข้าใจเบื้องต้นของแนวคิดเชิงวัตถุ

เมื่อเรียนสามารถเป็นระดับผู้ปกครองมากกว่าหนึ่งเมื่อเรียนคุณลักษณะสืบทอดจากคลาสจะปรากฏเป็นมรดกหลาย

ทับทิมไม่สนับสนุนโดยตรงมรดกหลาย แต่ทับทิมโมดูล (Module) มีคุณสมบัติที่ยอดเยี่ยมอีก มันแทบไม่จำเป็นต้องใช้มรดกหลายที่มีให้บริการเครื่องมือที่เรียกว่าmixin

ทับทิมไม่ได้โดดบรรลุกลไกมรดกหลาย แต่นำมาใช้เป็นเทคโนโลยี mixin แทน โมดูลรวมถึงการกำหนดชั้นวิธีโมดูลเพื่อผสมลงในชั้นเรียน

ลองดูที่โค้ดตัวอย่างต่อไปในเชิงลึกความเข้าใจใน mixin:

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end

class Sample
include A
include B
   def s1
   end
end

samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1
  • โมดูลประกอบด้วยกระบวนการของ A1 และ A2
  • โมดูล B โดยวิธี B1 และ B2 องค์ประกอบ
  • คลาสของตัวอย่างมีโมดูล A และ B
  • คลาสของตัวอย่างสามารถเข้าถึงทั้งหมดสี่วิธีคือ A1, A2, B1 และ B2
  • ดังนั้นคุณจะเห็นว่ากลุ่มตัวอย่างระดับสืบทอดสองโมดูลคุณสามารถพูดตัวอย่างชั้นใช้มรดกหลายหรือmixin