Project1

标题: attr_accessor的作用是? [打印本页]

作者: Vernon126    时间: 2008-1-29 07:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 华华    时间: 2008-1-29 08:04
怎么没有呢?- -+
Game_Temp,Game_System初始化对象那里很多啊
作者: 司马睿风    时间: 2008-1-29 08:10
@是实变量,只要其对象存在,变量的值就会被保存
作者: 华华    时间: 2008-1-29 08:44
没什么区别吧[LINE]1,#dddddd[/LINE]实变量:属于个体对象的变量。只要对象存在,变量值就会保存。
由于实变量有这个特性,所以常用来作对象的属性。
但是,实变量是无法从外部直接使用,所以就需要定义一些操作实变量的函数。比如
class Person
  def name  # 通过该方法,可以获得实变量@name的值
    return @name
  end

  def name=(name) # 通过name= 方法可以改变@name的值
    @name = name
  end
end
这样,我们就可以在Person类外部操作实变量@name了
比如
axs = Person.new  # 新建Person类的实例axs
axs.name = "FlameHaze"  # 通过 name= 方法改变@name的值
p axs.name #通过name方法取得并输出对象axs中实变量@name的值
但是,用这种方法,有多少个要从外部操作的实变量,就要写多少个这样的方法,很麻烦。就可以直接用
attr_accessor :name 代替[LINE]1,#dddddd[/LINE]其他几种形式
attr_reader :
自动准备实变量作为只读属性
attr_reader :name
就相当于
def name
         return @name
   end
因为没有 def name=(name)方法,所以这样的属性就是只读的(能够读取,不能改变)如果使用
axs = Person.new  # 新建Person类的实例axs
axs.name = "FlameHaze"
就会出错,提示“找不到方法 name=”
[LINE]1,#dddddd[/LINE]个人理解是这样的- -+! [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: Vernon126    时间: 2008-1-29 09:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-1-29 11:02
4楼我爱你
讲得很好懂啊……





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1