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 编辑
当一堆不是自己写的脚本聚在一起后……脚本们各自的脾气不一样……
不够的……只要存在,就会引发问题……就像 高速公路上不能停车(脚本)一样……
玩动态不是不可以,但我觉得RPG Maker制作的游戏不需要这种编程技巧吧?
比喻回复你......
如果每个脚本是一辆车……
我不是不想当交警……而是我没有能力当交警……
我选择当铺路工人,为脾气不好的脚本 铺一条路……
呃
作者: 克莉丝 时间: 2013-7-4 19:17
Ceopal 发表于 2013-7-3 18:56
当一堆不是自己写的脚本聚在一起后……脚本们各自的脾气不一样……
不够的……只要存在,就会引发问题…… ...
直接调用模块的方法为什么不可呢
不如你自己对object类写一个方法让它对指定模块的方法逐个undef吧,把N替换为Object就可以直接用了
module A
def a
msgbox "1"
end
end
class N
include A
def initialize
end
def cmds(a)
eval(a)
end
def uninclude(a)
for f in a.instance_methods
eval("undef "+f.to_s)
end
end
end
n = N.new
n.a #==> 1
n.uninclude A
n.a #==> unfined mothod error
module A
def a
msgbox "1"
end
end
class N
include A
def initialize
end
def cmds(a)
eval(a)
end
def uninclude(a)
for f in a.instance_methods
eval("undef "+f.to_s)
end
end
end
n = N.new
n.a #==> 1
n.uninclude A
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
总感觉跟你之前一个帖子有奇怪的联系。
# This is dk.rb
Module A
def self.foo
puts "bar"
end
end
class DK
def initialize
puts "DK"
end
end
A.foo
DK.new
# This is dk.rb
Module A
def self.foo
puts "bar"
end
end
class DK
def initialize
puts "DK"
end
end
A.foo
DK.new
使用load(file, true)测试:
C:\Users\DeathKing>irb
irb(main):001:0> load("dk.rb", true)
"bar"
dk
=> true
irb(main):002:0> DK.new
NameError: uninitialized constant DK
from (irb):2
from D:/Compier/Ruby193/bin/irb:12:in `<main>'
irb(main):003:0>
C:\Users\DeathKing>irb
irb(main):001:0> load("dk.rb", true)
"bar"
dk
=> true
irb(main):002:0> DK.new
NameError: uninitialized constant DK
from (irb):2
from D:/Compier/Ruby193/bin/irb:12:in `<main>'
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 |