Project1

标题: [送给那些懒得Alias的人的礼物] Monkeypatch v0.5 [打印本页]

作者: LBQ    时间: 2013-9-26 06:53
标题: [送给那些懒得Alias的人的礼物] Monkeypatch v0.5
本帖最后由 LBQ 于 2013-9-26 21:29 编辑

- Monkeypatch v0.5 - LBQ的尝试 -

这个脚本的用途就如同他的名字一样——用来打猴子补丁
当然在下这种渣估计写出来的这个东西估计也会bug多多吧。。。


用法:
RUBY 代码复制
  1. class Scene_Base
  2.   alias lbq_sb_start start
  3.   def start
  4.     lbq_sb_start
  5.     puts "hi"
  6.   end
  7. end


等同于

RUBY 代码复制
  1. class Scene_Base
  2.   monkeypatch :start do
  3.     puts "hi"
  4.   end
  5. end



默认在最后加入代码
如果想要在之前加入的话用 monkeypatch :name, :before

于是这个理论上可以替代alias猴子补丁但是因为渣LBQ对Proc之类的东西了解不多=。=所以出错了麻烦说一下。。

RUBY 代码复制
  1. #===============================================================================
  2. #  Monkeypatch v 0.5 by LBQ
  3. #===============================================================================
  4. module Monkeypatch
  5.  
  6.   $monkeypatch_blocks = {}
  7.  
  8.   def monkeypatch(*args,&block)
  9.  
  10.     pos = :none
  11.     if args.length == 0
  12.       raise
  13.     elsif args.length == 1
  14.       pos = :after
  15.     elsif args.length == 2
  16.       pos = args[1]
  17.     else
  18.       raise
  19.     end
  20.  
  21.  
  22.     method_name = args[0]
  23.     old_name = method_name.to_sym
  24.     new_name = "monkeypatch_#{self.inspect.downcase}_#{method_name.to_s}_lbq".to_sym
  25.     alias_method new_name, old_name
  26.  
  27.     monkeypathcblockname = self.inspect.downcase+"_"+ method_name.to_s + rand(99999).to_s
  28.     $monkeypatch_blocks[monkeypathcblockname.to_sym] = block
  29.  
  30.  
  31.  
  32.     if pos == :after
  33.       class_eval %{
  34.         def #{method_name}(*args)
  35.           #{new_name.to_s}(*args)
  36.           instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
  37.         end
  38.       }
  39.     else
  40.       class_eval %{
  41.         def #{method_name}(*args)
  42.           instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
  43.           #{new_name.to_s}(*args)
  44.         end
  45.       }
  46.     end
  47.  
  48.   end
  49. end



突然发现貌似忘了给最后的附加代码了。。。
RUBY 代码复制
  1. class Module
  2.   include Mokeypatch
  3. end

作者: SuperMario    时间: 2013-9-26 08:14
如果我要在前后都加呢,或者要用原方法的返回值进行新运算呢?
作者: 熊喵酱    时间: 2013-9-26 08:25
Well... I have never seen anyone is that lazy........
Good script though.
作者: 喵呜喵5    时间: 2013-9-26 09:35
用SB一样的姿势开心的跑来来当小白鼠……
以后我这种人不是更懒得用Alias了嘛!

作者: 怪蜀黍    时间: 2013-9-27 09:46
+ rand(99999).to_s





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