attr_reader仅在某些环境中工作

时间:2014-06-28 02:28:03

标签: ruby

这也适用于attr_writerattr_accessor

我最近一直在玩一些简单的Ruby代码,以下代码片段在我运行它的所有环境中都不起作用:

class Human
  attr_reader :name
  def initialize(name)
    @name = name
  end
end

hank = Human.new("Hank")
hank.name

这应输出“Hank”,它在我的命令行irb中输出。在Textmate2和Aptana Studio 3中,运行此代码时没有输出。如果我明确定义读者,那么这三个都按预期工作:

def name
  puts @name
end

当我在Aptana终端和我常用的终端玩游戏时输入:

$ ruby -v

他们似乎都使用相同的版本:ruby 2.0.0p451。发生了什么事?

1 个答案:

答案 0 :(得分:3)

attr_reader只是没有按照你的想法做到。

puts hank.name

而不是

hank.name

你会看到输出。 irb是一种特殊情况,它向您显示最后执行的语句的返回值。 ruby本身不会这样做,它只打印你明确告诉它打印的东西。