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

标签 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)。这怎么可能,为什么会这样?

最佳答案

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

def unique
 @unique
end

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

关于ruby - 不使用@符号访问实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509416/

相关文章:

mysql - 项目中缺少 database.yml 文件

ruby-on-rails - rails 上的 ruby 。付费发表文章

mysql - mysql2 gem 安装失败

ruby - YARD不把 `code`替换成<code>code</code>正常吗?

ruby - 在循环内附加到 ruby​​ 数组时拒绝 nil 值

ruby - 当我运行 "gem install bundler"时出现权限被拒绝错误

ruby-on-rails - 将数组分隔为带引号的逗号分隔字符串

ruby-on-rails - attr_accessor 导致 Rspec 测试失败

ruby-on-rails - ruby rails : Fully functional tableless model

python - 如何在不安装解释器的情况下部署 Perl/Python/Ruby 脚本?