5

我不确定这是如何有效的代码:

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

我正在从教程中阅读此内容,但我无法找到有关 << 如何专门用于实例变量的任何信息。我认为在处理要“附加到数组”的数组时,“<<”只是重载了。这实际上是在做单例类的事情吗?

4

2 回答 2

6

这段代码有点混乱。该行:

games << game

实际上是调用方法games,它返回@games。然后对该<<结果调用该方法。Ruby 解析器中有一些语法糖可以将<<运算符转换为对左操作数的方法调用,并且在此之前对左操作数进行求值。

编辑更清楚:

该行可以这样写:

(games).<< game

或这个:

(self.games).<< game

或者:

(self.games) << game

所有这些都执行该games方法。

于 2013-03-12T21:41:21.957 回答
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
于 2013-03-12T22:57:42.870 回答