นี่คือโค้ดบางส่วนที่ฉันใช้ในคลาสชื่อ Game:
def play
puts "There are #{@players.length} players in #{@title}."
@players.each do |n|
puts n
end
@players.each do |o|
GameTurn.take_turn(o)
puts o
end
end
ใช้บรรทัดโค้ดที่อ้างอิงถึงโมดูลที่เรียกว่า GameTurn ภายใน GameTurn ฉันมีวิธีที่เรียกว่า self.take_turn
:
require_relative "die"
require_relative "Player"
module GameTurn
def self.take_turn(o)
die = Die.new
case die.roll
when 1..2
o.blam
puts "#{o.name} was blammed homie."
when 3..4
puts "#{o.name} was skipped."
else
o.w00t
end
end
end
ฉันสับสนเล็กน้อยว่าทำไมเราถึงใช้ "ตนเอง" และความแตกต่างระหว่างวิธีการเปิดเผยและวิธีการมิกซ์อินในโมดูล ฉันถาม "วิธีการอินสแตนซ์ของคลาสเทียบกับวิธีโมดูล"
take_turn
เป็นวิธีการแบบเปิดเผยจริงหรือ แม้ว่าเราจะป้อนอ็อบเจ็กต์จากคลาสผู้เล่นให้กับเมธอด take_turn
แต่เมธอดนี้ยังถือว่าเป็นเมธอดโมดูลที่เราใช้โดยตรงหรือไม่ นี่ไม่ถือเป็นวิธีการมิกซ์อินใช่ไหม เรากำลังป้อนอ็อบเจ็กต์จากคลาสอื่นเข้าไปในเมธอด take_turn
ดังนั้นมันจะไม่ปะปนกับคลาสอื่นใช่หรือไม่
นอกจากนี้ ฉันยังคงพยายามหาคำตอบว่าเมื่อใด/ทำไมเราถึงใช้คำว่า "ตนเอง"? ดูเหมือนแปลกที่เราต้องกำหนดวิธีการ take_turn
ภายในโมดูล GameTurn โดยใช้คำว่า "self" ดูเหมือนว่ามันควรจะนิยามโดยไม่มี "ตัวตน" ไม่ใช่เหรอ?