Ruby 一个新手小问题

zsxywz0928 · 2012年10月26日 · 最后由 virgil 回复于 2012年10月27日 · 2027 次阅读
class BookInStock
  attr_reader :isbn
  attr_accessor :price
  def initialize(isbn, price)
    @isbn = isbn
    @price = price
  end
  def price_in_cents
    Integer(price*100 + 0.5)
  end
end

我的问题在 price_in_cents 这个方法里,我的理解应该是 Integer(@price*100 + 0.5), 因为 price 应该是构造方法里面的局部变量啊,为什么还能在另一个方法里调用呢??? 而且结果还是正确的,我很想不通啊......

@符号的学名叫成员变量,在 class 范围可访问。

#1 楼 @chenge 楼主问的不是这个 @zsxywz0928 我的理解,attr_accessor :price 实际上是写了一个名叫 price 的 method,这个 method 功能就是给给@price这个变量读写 (写的方法名是 price=好像),在 Integer(price*100 + 0.5) 里面这个 price 实际上是在 call 这个 method,返回的是@price的值

楼主直接用 Integer(@price*100 + 0.5) 也是可以的,只是用 attr_accessor 去读的话以后加这加那的比较 flexible 一点

@zsxywz0928 楼主从 java 转过来的吧... :)

@blacktulip 嗯嗯嗯,是的,我忘记 ruby 调用方法的时候可以不加括号了..........以前的习惯,@virgil 说的对.....我是从 java 转过来滴...面向对象的思想都是 java 的 XD

@zsxywz0928 我也犯过这样的错误,呵呵 :)...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号