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

Kos*_*tya 7 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
Run Code Online (Sandbox Code Playgroud)

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

fme*_*dez 15

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

def unique
 @unique
end
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*ich 6

attr_reader :unique电话增加了一个@unique公开提供的访问者unique.这是一个奇怪的选择,作者提出混合和使用都匹配@uniqueunique虽然.