这是一本书的例子:
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它的属性.
该attr_reader :unique电话增加了一个@unique公开提供的访问者unique.这是一个奇怪的选择,作者提出混合和使用都匹配@unique和unique虽然.