Project1

标题: 某一类的实变量怎样调用到另一个类里? [打印本页]

作者: seasoneast    时间: 2010-8-7 21:10
标题: 某一类的实变量怎样调用到另一个类里?
本帖最后由 seasoneast 于 2010-8-9 20:03 编辑

想请教一下~
作者: 逸豫    时间: 2010-8-7 21:12
首先必须是实例变量(以@开头)
然后,在类的开头写上
attr  :变量标识符,true

最后,调用的时候
类的实例.变量标识符
作者: seasoneast    时间: 2010-8-7 21:24
回复 逸豫 的帖子


    假如我要使A类的@command_window.index在B类可用,那应该在A类开头写上什么~?
作者: zhangbanxian    时间: 2010-8-7 21:36
class A
attr_reader :command_window
end
a = A.new
b = a.command_window.index
ps:
attr_accessor是读写,attr_reader是只读,attr_writer是只写

作者: 小幽的马甲    时间: 2010-8-7 21:43
def command_window
  return @command_window
end
理论上这样也行,不过最好用attr
作者: 不如归去    时间: 2010-8-7 21:48
对于这类只是少量使用的情形,可以考虑用instance_eval
表达式 A类对象名.instance_eval("@command_window").index
当然更常规的方法是attr_accessor(这里考虑到情况可以只开放attr_reader级的权限)
顺便汗一下1Lattr方法……= =是来晒技术的么
作者: seasoneast    时间: 2010-8-7 21:48
回复 zhangbanxian 的帖子

为何显示attr_reader:那一行发生SyntaxError~?
   
作者: seasoneast    时间: 2010-8-7 22:23
回复 不如归去 的帖子

这样可以改写变量的值吗?
   
作者: zhangbanxian    时间: 2010-8-8 08:41
回复

为何显示attr_reader:那一行发生SyntaxError~?
seasoneast 发表于 2010-8-7 21:48
注意不要打成中文冒号,还有冒号后面不要有空格- -b



作者: 逸豫    时间: 2010-8-8 10:52
只读:
attr_reader :标识符王道
或者
attr :标识符王道

只写:
attr_writer :标识符王道

读写:
attr :标识符王道,true
attr_accessor :标识符王道

另:直接写attr是因为方便- -
作者: seasoneast    时间: 2010-8-8 11:22
在另一个类里引用的时候,可以更改实变量的值吗?
作者: zhangbanxian    时间: 2010-8-8 11:27
在另一个类里引用的时候,可以更改实变量的值吗?
seasoneast 发表于 2010-8-8 11:22
可以,用
对象名.实变量名= 值



作者: seasoneast    时间: 2010-8-8 11:29
回复 zhangbanxian 的帖子

假如,引用Scene_Menu里的@command_window,在另一个类里更改@commadn_window.active,就用Scene_Menu.@command_window.active = true 可以吗?
作者: 小幽的马甲    时间: 2010-8-8 11:31
>用Scene_Menu.@command_window.active = true 可以吗?
= =真的可以这么写么……
$scene = Scene_Menu.new
$scene.command_window.active = true
作者: seasoneast    时间: 2010-8-8 11:36
回复 小幽的马甲 的帖子
啊……原来是要这样写啊……

   
作者: zhangbanxian    时间: 2010-8-8 11:46
回复
啊……原来是要这样写啊……
seasoneast 发表于 2010-8-8 11:36
- -b你还得确定有active=这个方法,因为有active不等于有active=



作者: seasoneast    时间: 2010-8-8 11:56
回复 zhangbanxian 的帖子
呃,这个方法要在哪里定义呢?

   
作者: 小幽的马甲    时间: 2010-8-8 12:09
def active=(val)
  @active = val
end
放在@command_window的类里
或者直接attr_accessor:active
作者: seasoneast    时间: 2010-8-8 12:21
回复 小幽的马甲 的帖子

仍然显示active=未定义……
作者: 小幽的马甲    时间: 2010-8-8 12:29
回复 seasoneast 的帖子
  1. class A
  2.   attr_accessor:active
  3.   def initialize
  4.     @active = false
  5.   end
  6. end
  7. class B
  8.   attr_accessor:command_window
  9.   def initialize
  10.     @command_window = A.new
  11.     @command_window.active = false
  12.   end
  13. end
复制代码
  1. k = B.new
  2. p k.command_window.active
  3. k.command_window.active = true
  4. p k.command_window.active
复制代码

作者: seasoneast    时间: 2010-8-8 13:50
回复 小幽的马甲 的帖子

啊……还是失败……我要疯了…
   
作者: 幻の飞鱼    时间: 2010-8-8 15:30
默认脚本里有很多样板的变量=。=
格式的话参考一下就知道了,只要不是只读的话,应该都是可以通过调用改写变量的值的
作者: dantesy    时间: 2010-8-8 20:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: seasoneast    时间: 2010-8-8 21:24
啊,实在是太感谢各位的帮助了,不过我最后还是没搞成功,已经试着用其他的方法代替了~给各位添麻烦了,实在抱歉……




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