Project1

标题: 可能面临的兼容性问题以及解决方案 [打印本页]

作者: DeathKing    时间: 2010-7-8 13:19
标题: 可能面临的兼容性问题以及解决方案
兼容性一直是令人头疼的问题,因此我再次征询广大程序员在编写脚本时遇到的(或可能遇到的)一些兼容性的问题,同时我们可以探讨这个解决方案,我们也很乐意分享这些兼容性问题的解决方案,这将会作为一些有用的技巧写入FSL(Free Script License)中。

一个方案是来自于KGC系列脚本(很高兴的是,很多程序员也用了这个方案,比如PocketWiki上的优秀RGSS2脚本),使用了一个Hash的实例,是$imported变量,我喜欢戏称他为进口变量,美刀能够使他全局作用。他们用一个可以代表脚本的字符串作为Hash的键,一个TrueClass或是FalseClass的唯一实例来作为值,当脚本被使用时,改键的值为true,反之为false,类似于这样:

$imported = {} if $imported == nil
$imported["TestScript"] = true


接下来的事相比大家都能明白了吧?不过在目前的FSL中,采用的是这种方法的另一种实现方法,键——值对应关系中的值是一个数组,标志了脚本的版本,我们要相信脚本是会做出改动的吧!

$fscript = {} if $fscript == nil
$fscript["TestScript"] = [1,0,0]


但问题同样来了,脚本的执行总要有个先后顺序吧?对到底是我让你呢还是你让我呢?还是互相让?

一个人的智慧是有限的,结合大家的力量和经验将会变得十分有效,大家参与讨论吧!
作者: 阌籽之籽    时间: 2010-7-8 13:21
哦!这方面俺不是很行啊!
作者: 小幽的马甲    时间: 2010-7-8 13:30
我觉得处理兼容性最好的方法就是勤用alias= =
作者: DeathKing    时间: 2010-7-8 13:31
我觉得处理兼容性最好的方法就是勤用alias= =
小幽的马甲 发表于 2010-7-8 13:30


    alias已经被写入FSL,而且我个人认为alias应该是程序员的基础。


作者: wangswz    时间: 2010-7-8 15:45
alias还是我前不久才知道的东西。。。
作者: DeathKing    时间: 2010-7-8 22:30
alias还是我前不久才知道的东西。。。
wangswz 发表于 2010-7-8 15:45


alias十分好用,就如你的签名所言,日本的脚本兼容性超强除了$imported外还有就是善用alias。



作者: 高须小龙    时间: 2010-7-9 00:48
顶一下!
作者: 紫苏    时间: 2010-7-9 02:21
我在想是否能给每个脚本设计一个脚本唯一的优先级(可以由作者或使用者定),弄到版本数据后面,实际运行的时候两个相互不兼容的脚本比较优先级,低让高的
作者: DeathKing    时间: 2010-7-9 09:02
本帖最后由 DeathKing 于 2010-7-9 09:05 编辑
我在想是否能给每个脚本设计一个脚本唯一的优先级(可以由作者或使用者定),弄到版本数据后面,实际运行的 ...
紫苏 发表于 2010-7-9 02:21



A,B互不兼容,A的优先级低于B的优先级。
脚本按照A->B的顺序执行,如果按照这个顺序的话,问题同样不会解决。

我们是不是可以利用“约定优于配置”的原则来商议使用哪个脚本兼容哪个脚本(根据脚本完成时间状况)?或者给出脚本插入的顺序参考?
作者: IamI    时间: 2010-7-9 09:11
Alias不是万能的,在内置类中会爆F12(当然可以避免),修改中位代码的时候也会有些问题……
外国的脚本还很喜欢用Moudule-Include,这也是一个避免的好方法。

现在我的策略(特别是Window_Message这种脚本的时候),就是衍生Window_Message类,然后修改对应代码位置(Window_Message生成位置唯一。)

其实还有一个妥善的方案——SDK。
作者: DeathKing    时间: 2010-7-9 09:25
Alias不是万能的,在内置类中会爆F12(当然可以避免),修改中位代码的时候也会有些问题……
外国的脚本还 ...
IamI 发表于 2010-7-9 09:11



SDK就完全限制了自由性,再者,国外哪个10000行的SDK还经常爆与其他脚本不兼容。
作者: 紫苏    时间: 2010-7-9 16:46
A,B互不兼容,A的优先级低于B的优先级。
脚本按照A->B的顺序执行,如果按照这个顺序的话,问题同样不会 ...
DeathKing 发表于 2010-7-9 09:02

哦,原来你是指置换顺序就能解决的兼容问题,但实际上这样的“解决方法”通常是先执行的被后执行的覆盖掉了一部分功能
作者: DeathKing    时间: 2010-7-9 17:00
回复 紫苏 的帖子

我不是这个意思,我是针对您提出来的这个方法提出的自己的疑惑。
   
作者: dbshy    时间: 2010-7-9 17:32
各位大哥说啥呢  没看懂
哪位大神出来通俗易懂的解释一下
作者: tester    时间: 2010-7-10 19:58
alias蛋疼的是我要插在中间怎么办?
或者是弄成全局嵌入点
Class Hooks
def self.hooks_XXX_xxx0
end
def self.hooks_XXX_xxx1
end
end
class XXX
  def xxx
    xxxx
    Hooks.hooks_XXX_xxx0.runs
    xxxxx
    Hooks.hooks_XXX_xxx1.runs
    xxxxx
  end
end
对代码进行这样的处理
然后
alias Hooks类的方法

作者: zh99998    时间: 2010-7-11 06:16
alias只允许修改方法开头和结尾,如果要改动中间任何部分还是要完全def,这个应该是冲突的主要根源之一
另外FSL协议咱想直接加进我那个XE的游戏制作工具当脚本规范了
作者: DeathKing    时间: 2010-7-11 13:13
alias蛋疼的是我要插在中间怎么办?
或者是弄成全局嵌入点
Class Hooks
def self.hooks_XXX_xxx0
end
def s ...
tester 发表于 2010-7-10 19:58



有时候我们不必要去做兼容,可以和另外脚本的作者商议一下或者直接声明重构了XX方法,给个警告,当然,这是万不得已的时候才这样做。
作者: wangswz    时间: 2010-7-11 13:39
沉影的脚本真的很好 可惜写的脚本之间都没法完全兼容。。
作者: DeathKing    时间: 2010-7-11 18:25
沉影的脚本真的很好 可惜写的脚本之间都没法完全兼容。。
wangswz 发表于 2010-7-11 13:39


问题最大的一个是“随机武器?”就是和暗黑类似的武器系统,哇咔咔……当时我郁闷了好一会儿。


作者: wangswz    时间: 2010-7-11 18:28
问题最大的一个是“随机武器?”就是和暗黑类似的武器系统,哇咔咔……当时我郁闷了好一会儿。

还有武器升级 耐久度 镶嵌 这四个让我很纠结



作者: tsy0302    时间: 2010-7-27 03:21
提示: 作者被禁止或删除 内容自动屏蔽




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