【发布时间】:2014-10-23 21:46:27
【问题描述】:
这是我在名为 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
我有点困惑为什么我们使用“self”以及模块中暴露方法和 mixin 方法之间的区别。我问了这个“instance methods of classes vs module methods”
take_turn 真的是暴露的方法吗?即使我们向take_turn 方法提供了一个来自播放器类的对象,这个方法仍然被认为是我们直接使用的模块方法吗?这不被认为是一种混合方法吗?我们正在向take_turn 方法提供来自另一个类的对象,所以它不会与其他类混合吗?
另外,我仍在试图弄清楚我们何时/为什么使用“自我”一词?我们需要使用术语“self”在 GameTurn 模块中定义方法 take_turn 似乎很奇怪。好像应该不用“self”来定义吧?
【问题讨论】:
-
你的问题太多了。如果它们密切相关,请将它们减少到一个或最多两个。