我不确定这是如何有效的代码:
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
Run Code Online (Sandbox Code Playgroud)
这将打印出来:
魔兽SC2 D3泰坦
我认为它应该打印出来
魔兽SC2 D3
add_game方法不使用实例变量.作为Ruby的新手,我不明白它是如何工作的.不应该是:
def add_games(game)
@games << game
end
Run Code Online (Sandbox Code Playgroud)
我正在从一个教程中读到这个,但是我无法找到关于<<如何专门使用实例变量的任何内容.当处理数组'追加到数组'时,我认为'<<'刚刚过载.这实际上是在做Singleton类吗?
这段代码有点令人困惑.这条线:
games << game
Run Code Online (Sandbox Code Playgroud)
实际上是调用games返回的方法@games.然后<<在该结果上调用该方法.Ruby解析器中有一些语法糖将<<操作符转换为左操作数上的方法调用,并且在操作数发生之前正在评估左操作数.
编辑以获得更清晰:
该行可以这样写:
(games).<< game
Run Code Online (Sandbox Code Playgroud)
或这个:
(self.games).<< game
Run Code Online (Sandbox Code Playgroud)
要么:
(self.games) << game
Run Code Online (Sandbox Code Playgroud)
所有这些都执行该games方法.
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |