幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1924|回复: 7

[RMXP] [求助]关于实变量和全局变量

[复制链接]

2

主题

7

帖子

79

积分

②入门

积分
79
发表于 2007-2-9 23:32:22 | 显示全部楼层 |阅读模式
哪位可以为我简单讲一下实变量和全局变量的区别?我这里有点迷糊,麻烦各位了
回复

使用道具 举报

3

主题

232

帖子

583

积分

⑤进阶

哇咔咔~传说中的称号.

积分
583
发表于 2007-2-9 23:38:58 | 显示全部楼层
class A
attr_reader   :a
def initialize
@a = 10
end
end

class B < A
def initialize
super
end
end


a = A.new
p a.a
b = B.new
p b.a

实变量可以在该类的任何地方使用`~~


实变量大概就这样 ```

全局``任何地方都可以访问
比如

class A
def initialize
$a = 10
end
end
a = A.new
p $a
回复 支持 反对

使用道具 举报

2

主题

7

帖子

79

积分

②入门

积分
79
 楼主| 发表于 2007-2-9 23:51:23 | 显示全部楼层
那实变量定义的时候一定要用attr_reader么?可以直接用赋值的方法 如 @a=10来定义吗?谢谢
回复 支持 反对

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-2-10 01:43:18 | 显示全部楼层
attr_reader或attr_accessor只是把a变成类A的属性,所以不一定要用~~
像神思所写的
如果写了
attr_reader :a
a = A.new
p a.a<---显示10,可以通过这样来访问...attr_reader只读,attr_accessor读写
如果缺了attr_reader a
那么a.a就无法访问~~
这个情况下对实变量访问,就要通过方法定义实现

def get_a
    return @a
  end
  def set_a=(a)
    @a = a
  end

这样就可以通过
a.set_a(5)
p a.get_a<---显示5
来访问~~

实变量 给S感觉就像
C++的私有成员
只要类对象存在,那么值就永远保留着~~
回复 支持 反对

使用道具 举报

3

主题

232

帖子

583

积分

⑤进阶

哇咔咔~传说中的称号.

积分
583
发表于 2007-2-10 11:30:48 | 显示全部楼层
[s:2] 小小的修正一下

def set_a=(a)
  @a = a
end

a.set_a(5)
这样貌似会出错``
a.set_a = 5


其实
attr_reader   :a
基本等于定义了这样一个方法
def a
return @a
end


attr_accessor :a

def a
return @a
end
def a=(value)
@a=value
end
回复 支持 反对

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-2-10 11:44:29 | 显示全部楼层
写错是def set_a(a)
咔咔...不好意思~~~
回复 支持 反对

使用道具 举报

2

主题

7

帖子

79

积分

②入门

积分
79
 楼主| 发表于 2007-2-10 13:43:04 | 显示全部楼层
两位解释的好详细,多谢了
回复 支持 反对

使用道具 举报

2

主题

28

帖子

311

积分

④见习

积分
311
发表于 2007-2-14 03:53:27 | 显示全部楼层
又有一个灌水的... [s:5]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-25 11:46 , Processed in 0.012771 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表