在ruby中,运算符操作实际上也是方法调用,于是,我们就可以避免繁琐的get,set方法了:
但是如果属性比较多的话,又会出现一大堆方法,这自然是ruby所不取的。于是又有了如下的简化:
或者进一步简化成:
这样我们就可以来进行方法调用,如下所示:
但是如果要在对象内部对其属性进行访问的话,就不能用attr_writer了,它会默认的把表达式左侧的变量当作局部变量来处理,而非对象属性。解决的方法有两种,一种是如initialize方法那样,使用@name来访问,还有一种是使用self.name来访问,如下所示:
- class Book
- def initialize(name)
- @name =name
- end
- def name
- @name
- end
- def name=(new_name)
- @name=new_name
- end
- end
但是如果属性比较多的话,又会出现一大堆方法,这自然是ruby所不取的。于是又有了如下的简化:
- class Book
- attr_reader :name
- attr_writer :name
- def initialize(name)
- @name=name
- end
- end
或者进一步简化成:
- class Book
- attr_accessor :name
- def initialize(name)
- @name=name
- end
- end
这样我们就可以来进行方法调用,如下所示:
- book = Book.new("Ruby")
- puts book.name
- book.name="Python"
- puts book.name
但是如果要在对象内部对其属性进行访问的话,就不能用attr_writer了,它会默认的把表达式左侧的变量当作局部变量来处理,而非对象属性。解决的方法有两种,一种是如initialize方法那样,使用@name来访问,还有一种是使用self.name来访问,如下所示:
- class Book
- attr_accessor :name
- def initialize(name)
- @name =name
- end
- def refresh
- self.name="new book"
- end
- end