加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

带有实例变量的Ruby <<(双倍小于)

发布时间:2020-12-17 03:22:50 所属栏目:百科 来源:网络整理
导读:我不确定这是如何有效的代码: class Library def initialize(games) @games = games end def add_game(game) games game end def games() @games endendgames = ['WoW','SC2','D3']lib = Library.new(games)puts lib.gameslib.add_game('Titan')puts lib.ga
我不确定这是如何有效的代码:

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

我正在从教程中读到这篇文章,但我无法找到关于如何<<特别适用于实例变量.我以为'<<'当处理数组'追加到数组'时,它刚刚被重载.这实际上是在做Singleton类吗?

解决方法

这段代码有点令人困惑.这条线:

games << game

实际上是调用方法游戏,返回@games.然后<<在该结果上调用方法. Ruby解析器中有一些语法糖会转换<<操作符调用左操作数上的方法调用,并在此操作之前评估左操作数. 编辑以获得更清晰: 该行可以这样写:

(games).<< game

或这个:

(self.games).<< game

要么:

(self.games) << game

所有这些都执行游戏方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读