โมดูลทับทิม (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