查看: 2493|回复: 4

[已经解决] 脚本入门小问题

[复制链接]
梦石
0
星屑
163
在线时间
38 小时
注册时间
2012-6-16
回帖
55
发表于 2014-8-4 19:56:39 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
[pre lang="ruby" line="1"]class Person
  def name
    return @name
  end
  def name=(name)
    @name = name
  end
  def hello
    print "我是" + @name
  end
end

alex = Person.new
alex.name = "阿莱库斯"
alex.hello              [/pre]
不知道以上代码里[pre lang="ruby" line="1"]  def name
    return @name
  end[/pre]
是有什么用,去掉了貌似也输出正常?

点评

去掉后,运行 print alex.name 试试。  发表于 2014-8-4 20:10

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

梦石
0
星屑
170
在线时间
809 小时
注册时间
2013-8-23
回帖
773

开拓者

发表于 2014-8-4 20:02:29 | 显示全部楼层
本帖最后由 冰水金刚 于 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来进行读取

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
163
在线时间
38 小时
注册时间
2012-6-16
回帖
55
 楼主| 发表于 2014-8-4 20:10:39 | 显示全部楼层
冰水金刚 发表于 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的对象时会执行的吗?如果不定义会不会出问题?如果叫别的名字,函数是否还会被执行?
回复

使用道具 举报

梦石
0
星屑
170
在线时间
809 小时
注册时间
2013-8-23
回帖
773

开拓者

发表于 2014-8-4 20:15:46 | 显示全部楼层
本帖最后由 冰水金刚 于 2014-8-4 20:19 编辑

initialize是Object类的私有化方法 可以F1标准库查看
它的大概意思是,当你用new方法来生成一个类的实例时,会自动调用该类中initialize中的内容进行初始化
如果该类中没定义initialize,就不进行初始化,不会报错
叫别的名就不能进行初始化(因为Object中无定义)
遗失的签名。。。
回复

使用道具 举报

梦石
0
星屑
163
在线时间
38 小时
注册时间
2012-6-16
回帖
55
 楼主| 发表于 2014-8-4 20:24:52 | 显示全部楼层
冰水金刚 发表于 2014-8-4 20:15
initialize是Object类的私有化方法 可以F1标准库查看
它的大概意思是,当你用new方法来生成一个类的实例时 ...

明白了~谢谢~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部