Project1

标题: 脚本入门小问题 [打印本页]

作者: 迷路在遠方    时间: 2014-8-4 19:56
标题: 脚本入门小问题
RUBY 代码复制
  1. class Person
  2.   def name
  3.     return @name
  4.   end
  5.   def name=(name)
  6.     @name = name
  7.   end
  8.   def hello
  9.     print "我是" + @name
  10.   end
  11. end
  12.  
  13. alex = Person.new
  14. alex.name = "阿莱库斯"
  15. alex.hello

不知道以上代码里
RUBY 代码复制
  1. def name
  2.     return @name
  3.   end

是有什么用,去掉了貌似也输出正常?
作者: 冰水金刚    时间: 2014-8-4 20:02
本帖最后由 冰水金刚 于 2014-8-4 20:04 编辑

对于属性来说,是既能写入又能读取
def name
    return @name
  end
定义的就是一个读取函数
def name=(name)
    @name = name
  end
这个定义了写入
这样alex.name = 可以赋值
alex.name 可以读取
完成了属性的定义
如果去掉
def name
    return @name
  end
就不能通过alex.name来进行读取
作者: 迷路在遠方    时间: 2014-8-4 20:10
冰水金刚 发表于 2014-8-4 20:02
对于属性来说,是既能写入又能读取
def name
    return @name

再问一个小问题:
  1. class Person
  2.   def initialize(name)
  3.     @name = name
  4.   end
  5. end

  6. alex = Person.new("阿莱库斯")
复制代码
这里面的initialize是系统默认的在新建Person的对象时会执行的吗?如果不定义会不会出问题?如果叫别的名字,函数是否还会被执行?
作者: 冰水金刚    时间: 2014-8-4 20:15
本帖最后由 冰水金刚 于 2014-8-4 20:19 编辑

initialize是Object类的私有化方法 可以F1标准库查看
它的大概意思是,当你用new方法来生成一个类的实例时,会自动调用该类中initialize中的内容进行初始化
如果该类中没定义initialize,就不进行初始化,不会报错
叫别的名就不能进行初始化(因为Object中无定义)
作者: 迷路在遠方    时间: 2014-8-4 20:24
冰水金刚 发表于 2014-8-4 20:15
initialize是Object类的私有化方法 可以F1标准库查看
它的大概意思是,当你用new方法来生成一个类的实例时 ...

明白了~谢谢~




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