这也适用于attr_writer
和attr_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。发生了什么事?
答案 0 :(得分:3)
attr_reader只是没有按照你的想法做到。
试
puts hank.name
而不是
hank.name
你会看到输出。 irb是一种特殊情况,它向您显示最后执行的语句的返回值。 ruby本身不会这样做,它只打印你明确告诉它打印的东西。