我不确定这是如何有效的代码:
class Library
def initialize(games)
@games = games
end
def add_game(game)
games << game
end
def games()
@games
end
end
games = ['WoW','SC2','D3']
lib = Library.new(games)
puts lib.games
lib.add_game('Titan')
puts lib.games
这将打印出来:
魔兽 SC2 D3 泰坦
我认为它应该打印出来
魔兽 SC2 D3
add_game方法不使用实例变量。作为Ruby的新手,我不明白它是如何工作的。不应该是:
def add_games(game)
@games << game
end
我正在从教程中读到这篇文章但我无法找到关于如何&lt;&lt;特别适用于实例变量。我以为'&lt;&lt;'当处理数组'追加到数组'时,它刚刚被重载。这实际上是用Singleton类做的吗?
答案 0 :(得分:6)
这段代码有点令人困惑。这一行:
games << game
实际上正在调用方法games
,该方法返回@games
。然后在该结果上调用<<
方法。 Ruby解析器中有一些语法糖将<<
运算符转换为左操作数上的方法调用,并且在此操作发生之前正在计算左操作数。
编辑以获得更清晰:
该行可以这样写:
(games).<< game
或者这个:
(self.games).<< game
或:
(self.games) << game
所有这些都执行games
方法。
答案 1 :(得分:0)
它使用类实例变量,查看代码:
class Library
def initialize(manygames)
@games = manygames
end
def add_game(game)
imlookingforclassinstancevariable << game
end
def imlookingforclassinstancevariable
@games #i'm the final storage of your array
end
end
games = ['WoW','SC2','D3']
lib = Library.new(games)
puts lib.imlookingforclassinstancevariable
lib.add_game('Titan')
puts lib.imlookingforclassinstancevariable