Project1

标题: F12如何重载脚本 [打印本页]

作者: 沉影不器    时间: 2009-9-20 22:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 后知后觉    时间: 2009-9-20 22:31
这样写的话 第一次显示的就是0
  1. class Orz
  2.   def test
  3.     p 1
  4.   end
  5. end
  6. class A < Orz
  7.   def test
  8.     p 0
  9.   end
  10. end
  11. A.new.test
复制代码

作者: 紫苏    时间: 2009-9-20 22:39
本帖最后由 紫苏 于 2009-9-27 22:00 编辑

动态修改父类的话,子类的 test 就被父类的覆盖了(可以试试在 class A < Orz 前后调用 test);而在 F12 之后,类继承表对象并没有清空,子类和父类的 test 重新定义,这时再次“动态”地 class A < Orz 就没有效果了(这个可以通过在 class A 定义之后 p 出 A 的父类来证明,F12 前后的父类分别是 Object 和 Orz),因为 A 已经是 Orz 的子类
[line]1[/line]有误,请看 7 楼 ><
作者: 沉默的米饭团    时间: 2009-9-22 14:58
咦。。。脚本保存后有先在数据库中也保存吗,如果没有。F12必定会这样
作者: goahead    时间: 2009-9-25 16:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2009-9-27 21:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫苏    时间: 2009-9-27 21:39
本帖最后由 紫苏 于 2009-9-27 22:00 编辑

goahead那样确实是两个类,因为第二个 A 是在 Orz 这个名字空间中定义的,也就是 A 被定义为了 Orz 模块上下文中的一个常量,而不像第一个 A 是在顶层定义的,所以第一个 A 是全局常量~两个不同的常量,自然可以分别指向不同的类对象,即便父类不同,它们也是不同的类……
这就好比文件系统中,c:\ 下有一个叫 A 的文件,c:\Orz 下有个叫 A 的文件~
  1. class A
  2. end

  3. class Orz
  4.   class A
  5.   end
  6. end

  7. p A.id, Orz::A.id # 不同
复制代码
另外通过 objct_id 测试发现我三楼说的有误,动态改变已定义类的父类的时候,原来的类是被抛弃了,原来的类名常量指向了一个新的 Class 对象,这个类就是为了继承制定父类而重新分配的一个父类~而新分配的这个子类并没有定义 test,所以直接继承了父类的 test,F12后的情况也应该是像上面说的那样~
  1. class A
  2. end

  3. p A.id

  4. class A < Hash
  5. end

  6. p A.id
复制代码

作者: goahead    时间: 2009-9-28 10:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫苏    时间: 2009-9-30 11:42
能,你可以在类常量引用改变之前用另一个常量去保存之前的类对象,或者调用 ObjectSpace._id2ref:

  1. class A
  2. end

  3. B = ObjectSpace._id2ref(A.id)

  4. p A == B

  5. class A < Hash
  6. end

  7. p A == B
复制代码

作者: 沉影不器    时间: 2009-10-1 21:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2009-10-1 22:55
我是来膜拜lz的...
作者: 沉影不器    时间: 2009-10-3 22:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2009-10-5 11:06
膜拜楼主,然后说下我的看法

按下F12时,系统生成一个Reset异常,注意是生成,在按F12之前没有这个异常类
然后抛出这个异常,这就是F12的全部作用

然后,主程序随时判断各种异常,比如抓到SystemExit自动退出,同理抓到Reset后就会释放掉所有窗口精灵元件,然后从第一个脚本页开始执行,也就是仅仅重新执行脚本编辑器里能看到的内容,而不会重载默认定义,也不会清空变量常量

PS.  XP区不常来,要联系请用PM
作者: IamI    时间: 2009-10-5 11:32
膜拜楼主,然后说下我的看法

按下F12时,系统生成一个Reset异常,注意是生成,在按F12之前没有这个异常类
然后抛出这个异常,这就是F12的全部作用

然后,主程序随时判断各种异常,比如抓到SystemExit自动退出,同 ...
zh99998 发表于 2009-10-5 11:06

Reset真神奇= =膜拜LZ。
作者: 沉影不器    时间: 2009-10-5 21:13
提示: 作者被禁止或删除 内容自动屏蔽




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