不使用@符号访问实例变量

时间:2013-03-19 20:09:18

标签: ruby

以下是一本书的例子:

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中,作者在不使用@符号(unique)的情况下访问变量unique.size - 1。怎么可能,为什么会这样呢?

2 个答案:

答案 0 :(得分:14)

此行attr_reader :unique, :index为属性

创建了getter
def unique
 @unique
end

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

答案 1 :(得分:6)

attr_reader :unique电话会在@unique处公开提供unique访问者。尽管如此,作者使用@uniqueunique进行混合和匹配是一个奇怪的选择。