查看: 2343|回复: 4

[通用发布] [送给那些懒得Alias的人的礼物] Monkeypatch v0.5

[复制链接]

唯一的信徒

梦石
0
星屑
1697
在线时间
1359 小时
注册时间
2013-1-29
回帖
1537
发表于 2013-9-26 06:53:33 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 LBQ 于 2013-9-26 21:29 编辑

- Monkeypatch v0.5 - LBQ的尝试 -

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


用法:
[pre lang="ruby" line="1"]class Scene_Base
  alias lbq_sb_start start
  def start
    lbq_sb_start
    puts "hi"
  end
end[/pre]

等同于

[pre lang="ruby" line="1"]class Scene_Base
  monkeypatch :start do
    puts "hi"
  end
end[/pre]


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

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

[pre lang="ruby" line="1"]#===============================================================================
#  Monkeypatch v 0.5 by LBQ
#===============================================================================
module Monkeypatch
  
  $monkeypatch_blocks = {}
  
  def monkeypatch(*args,&block)
   
    pos = :none
    if args.length == 0
      raise
    elsif args.length == 1
      pos = :after
    elsif args.length == 2
      pos = args[1]
    else
      raise
    end
   
   
    method_name = args[0]
    old_name = method_name.to_sym
    new_name = "monkeypatch_#{self.inspect.downcase}_#{method_name.to_s}_lbq".to_sym
    alias_method new_name, old_name
   
    monkeypathcblockname = self.inspect.downcase+"_"+ method_name.to_s + rand(99999).to_s
    $monkeypatch_blocks[monkeypathcblockname.to_sym] = block
   
   
   
    if pos == :after
      class_eval %{
        def #{method_name}(*args)
          #{new_name.to_s}(*args)
          instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
        end
      }
    else
      class_eval %{
        def #{method_name}(*args)
          instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
          #{new_name.to_s}(*args)
        end
      }
    end
   
  end
end[/pre]


突然发现貌似忘了给最后的附加代码了。。。
[pre lang="ruby" line="1"]class Module
  include Mokeypatch
end[/pre]

评分

参与人数 3星屑 +305 收起 理由
怪蜀黍 + 200 + rand(99999).to_s
晴兰 + 45 精品文章
喵呜喵5 + 60 精品文章

查看全部评分

『我只是一个正在潜心修炼的渣乐师罢了』
Dear Time\(^o^)/~


假如上面的图片挂了的话麻烦各位去发个帖 @ 一下 orzFly 让他修复 deartime
梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
回帖
420
发表于 2013-9-26 08:14:07 来自手机 | 显示全部楼层
如果我要在前后都加呢,或者要用原方法的返回值进行新运算呢?

点评

LBQ
前后都加一个:after一个:before。 原有方法返回值新运算目测alias也麻烦=。=  发表于 2013-9-26 08:29
回复

使用道具 举报

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-9-26 08:25:11 | 显示全部楼层
Well... I have never seen anyone is that lazy........
Good script though.

回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2013-9-26 09:35:18 | 显示全部楼层
用SB一样的姿势开心的跑来来当小白鼠……
以后我这种人不是更懒得用Alias了嘛!
回复

使用道具 举报

八宝粥的基叔

梦石
0
星屑
4957
在线时间
5234 小时
注册时间
2009-4-29
回帖
14054

贵宾

发表于 2013-9-27 09:46:49 | 显示全部楼层
+ rand(99999).to_s
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部