8

这是一本书的例子:

class TextCompressor
  attr_reader :unique, :index
  def initialize( text )
    @unique = []
    @index = []
    add_text( text )
  end
  def add_text( text )
    words = text.split
    words.each { |word| add_word( word ) }
  end
  def add_word( word )
    i = unique_index_of( word ) || add_unique_word( word )
    @index << i
  end
  def unique_index_of( word )
    @unique.index(word)
  end
  def add_unique_word( word )
    @unique << word
    unique.size - 1
  end
end

在该方法中,作者在不使用@ 符号( )add_unique_word的情况下访问变量。这怎么可能,为什么会这样?uniqueunique.size - 1

4

2 回答 2

17

此行为该属性attr_reader :unique, :index创建了一个:getter

def unique
 @unique
end

您在该行中看到的unique.size - 1是对 getter 的方法调用,然后访问size它的属性。

于 2013-03-19T20:13:13.213 回答
7

attr_reader :unique调用添加了一个访问器,该访问器在@unique上公开可用unique。作者做出了一个奇怪的选择来混合和匹配使用两者@uniqueunique虽然。

于 2013-03-19T20:12:56.910 回答