ฉันอ่านที่มาของArtificeและเห็น:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
บรรทัด: https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
ทำไมไม่ทำNet::HTTPแทน::Net::HTTPเช่นเมื่อคุณใช้::เป็นคำนำหน้าหมายความว่าอย่างไร
ฉันอ่านที่มาของArtificeและเห็น:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
บรรทัด: https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
ทำไมไม่ทำNet::HTTPแทน::Net::HTTPเช่นเมื่อคุณใช้::เป็นคำนำหน้าหมายความว่าอย่างไร
คำตอบ:
::เป็นผู้ประกอบการที่มีรายละเอียดขอบเขต สิ่งที่ทำคือกำหนดขอบเขตของโมดูลที่สามารถพบได้ภายใต้ ตัวอย่างเช่น:
module Music
module Record
# perhaps a copy of Abbey Road by The Beatles?
end
module EightTrack
# like Gloria Gaynor, they will survive!
end
end
module Record
# for adding an item to the database
end
ในการเข้าถึงMusic::Recordจากด้านนอกของคุณจะใช้MusicMusic::Record
หากต้องการอ้างอิงMusic::RecordจากMusic::EightTrackคุณสามารถใช้Recordเพราะกำหนดไว้ในขอบเขตเดียวกัน (ของMusic)
อย่างไรก็ตามเพื่อให้เข้าถึงRecordผู้รับผิดชอบโมดูลสำหรับการเชื่อมต่อกับฐานข้อมูลของคุณจากMusic::EightTrackคุณไม่สามารถใช้เพียงเพราะทับทิมคิดว่าคุณต้องการRecord Music::Recordนั่นคือเมื่อคุณจะใช้ประกอบการที่มีรายละเอียดขอบเขตเป็นคำนำหน้าระบุขอบเขตทั่วโลก / ::Recordหลัก:
module A
def self.method; "Outer"; end
end
module B
module A
def self.method; "Inner"; end
end
A.method # => "Inner"
::A.method # => "Outer"
end
ในกรณีเฉพาะของ Artifice บรรทัดที่ 41ของไฟล์ที่คุณแสดงจะถูกกำหนดเป็นNetโมดูลภายใน เพื่อให้ acess ไปนอกโมดูลจะใช้Net::Net