Project1

标题: 【Ruby】 有 include 相反的操作的写法吗? [打印本页]

作者: Ceopal    时间: 2013-7-2 21:10
标题: 【Ruby】 有 include 相反的操作的写法吗?



    就是去除模块的写法

作者: DeathKing    时间: 2013-7-3 01:59
为什么要这么做呢?
引入模块就是为了解决多继承的问题。为什么还要除去模块呢?是有什么特殊需要么?
作者: Ceopal    时间: 2013-7-3 09:25
DeathKing 发表于 2013-7-3 01:59
为什么要这么做呢?
引入模块就是为了解决多继承的问题。为什么还要除去模块呢?是有什么特殊需要么? ...


RUBY是动态语言嘛,为了实现游戏运行时自我修改

用undef应该可以实现,我想如果可以直接卸掉模块,修改效率更高……

我是新手嘛,所以不知道能不能卸模块或有更好的办法去掉已定义的东西

作者: xTsukihime    时间: 2013-7-3 10:23
if/else就够了不知道为什么要undef.
作者: DeathKing    时间: 2013-7-3 10:47
Ceopal 发表于 2013-7-3 09:25
RUBY是动态语言嘛,为了实现游戏运行时自我修改

用undef应该可以实现,我想如果可以直接卸掉模块,修改 ...

玩动态不是不可以,但我觉得RPG Maker制作的游戏不需要这种编程技巧吧?
作者: 巴尔德    时间: 2013-7-3 15:25
不如不要include,需要的时候用::直接引用
作者: Ceopal    时间: 2013-7-3 18:56
本帖最后由 Ceopal 于 2013-7-3 18:58 编辑

当一堆不是自己写的脚本聚在一起后……脚本们各自的脾气不一样……
if/else就够了不知道为什么要undef.

不够的……只要存在,就会引发问题……就像 高速公路上不能停车(脚本)一样……
玩动态不是不可以,但我觉得RPG Maker制作的游戏不需要这种编程技巧吧?

比喻回复你......

如果每个脚本是一辆车……

我不是不想当交警……而是我没有能力当交警……

我选择当铺路工人,为脾气不好的脚本 铺一条路……
不如不要include,需要的时候用::直接引用


作者: 克莉丝    时间: 2013-7-4 19:17
Ceopal 发表于 2013-7-3 18:56
当一堆不是自己写的脚本聚在一起后……脚本们各自的脾气不一样……

不够的……只要存在,就会引发问题…… ...

直接调用模块的方法为什么不可呢

不如你自己对object类写一个方法让它对指定模块的方法逐个undef吧,把N替换为Object就可以直接用了

RUBY 代码复制
  1. module A
  2.   def a
  3.     msgbox "1"
  4.   end
  5. end
  6. class N
  7.   include A
  8.   def initialize
  9.   end
  10.   def cmds(a)
  11.     eval(a)
  12.   end
  13.   def uninclude(a)
  14.     for f in a.instance_methods
  15.       eval("undef "+f.to_s)
  16.     end
  17.   end
  18. end
  19. n = N.new
  20. n.a #==> 1
  21. n.uninclude A
  22. n.a #==> unfined mothod error


我认为楼主说自己是新手只是个借口、借口,嗯
作者: Sion    时间: 2013-7-4 20:06
去除有用吗?别处一调用就报错了;那要是可以做到不调用,还去除它干嘛。还是说你本来就不打算调用它们{:2_263:}
作者: R-零    时间: 2013-7-4 21:38
Sion 发表于 2013-7-4 20:06
去除有用吗?别处一调用就报错了;那要是可以做到不调用,还去除它干嘛。还是说你本来就不打算调用它们{:2_ ...

如果是先前使用某种语言然后又开始使用ruby,一部分人会故意刁难ruby故意挑刺
作者: DeathKing    时间: 2013-7-4 22:46
总感觉跟你之前一个帖子有奇怪的联系。

RUBY 代码复制下载
  1. # This is dk.rb
  2. Module A
  3.   def self.foo
  4.      puts "bar"
  5.   end
  6. end
  7.  
  8. class DK
  9.   def initialize
  10.     puts "DK"
  11.   end
  12. end
  13.  
  14. A.foo
  15. DK.new


使用load(file, true)测试:

RUBY 代码复制
  1. C:\Users\DeathKing>irb
  2. irb(main):001:0> load("dk.rb", true)
  3. "bar"
  4. dk
  5. => true
  6. irb(main):002:0> DK.new
  7. NameError: uninitialized constant DK
  8.         from (irb):2
  9.         from D:/Compier/Ruby193/bin/irb:12:in `<main>'
  10. irb(main):003:0>


但这个只保证对模块有效。你可以参考《Ruby元编程》一书。

作者: Ceopal    时间: 2013-7-4 22:53
本帖最后由 Ceopal 于 2013-7-4 23:09 编辑
克莉丝 发表于 2013-7-4 19:17
直接调用模块的方法为什么不可呢

不如你自己对object类写一个方法让它对指定模块的方法逐个undef吧,把N ...

阿里嘎托``
ps: 不是新手哪里有那么多问题要请教别人……{:2_270:}

还是说你不调用

。。我只是在学习与想象中


DeathKing 发表于 2013-7-4 22:46
总感觉跟你之前一个帖子有奇怪的联系。

# This is dk.rb.

这个load作用好像是临时用代码的吧~
好像有点明白了





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