赞 | 15 |
VIP | 71 |
好人卡 | 24 |
积分 | 34 |
经验 | 70116 |
最后登录 | 2024-5-1 |
在线时间 | 3054 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 3444
- 在线时间
- 3054 小时
- 注册时间
- 2011-11-17
- 帖子
- 980
|
本帖最后由 yagami 于 2013-7-25 02:21 编辑
def name
return @name
end 这函数只是返回@name的值
alex.name其实可以理解为 alex.name() 这是个不传任何参数的函数//C里面就这么写的 RUBY不参数的函数省略括号
所以alex.name千万别理解成读取alex的name变量 其实是调用alex的name函数
至于为何要这个函数 ? attr_reader修饰的变量是私有成员 因为外界不能直接访问私有成员 如果要获取或修改name 需要个公有的接口函数
所以类似这样写alex.name="aaa"是绝对会报错的(不管你写没写name函数都报错)要修改就要用那个 names(name)函数了
但如果用attr_accessor 修饰name 那么 这个name函数完全没存在的意义 因为name变量已经变成公有变量了
外界可以直接读取或修改 所以这时写alex.name="aaa"是合法的
#################################################################
def names(name)###括号里的name是传参 所以名字其实无所谓 取名x都行
@name = name###把传参name赋给@name
#这里其实省略了一个return 其实可以理解为返回个void 也就是说并没返回值
end
该函数起到的作用仅仅是把@name赋值而已
alex.names("aaa")起到的作用只是把aaa赋给对象alex的name变量上
函数要这样调用 对象.函数名(参数)
|
评分
-
查看全部评分
|