设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1848|回复: 4
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

唯一的信徒

梦石
0
星屑
1665
在线时间
1357 小时
注册时间
2013-1-29
帖子
1637
跳转到指定楼层
1
发表于 2013-9-26 06:53:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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

评分

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

查看全部评分

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


假如上面的图片挂了的话麻烦各位去发个帖 @ 一下 orzFly 让他修复 deartime

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
帖子
424
2
发表于 2013-9-26 08:14:07 手机端发表。 | 只看该作者
如果我要在前后都加呢,或者要用原方法的返回值进行新运算呢?

点评

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

使用道具 举报

Lv2.观梦者

梦石
0
星屑
362
在线时间
1292 小时
注册时间
2013-1-12
帖子
3590

贵宾

3
发表于 2013-9-26 08:25:11 | 只看该作者
Well... I have never seen anyone is that lazy........
Good script though.

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21626
在线时间
9413 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

4
发表于 2013-9-26 09:35:18 | 只看该作者
用SB一样的姿势开心的跑来来当小白鼠……
以后我这种人不是更懒得用Alias了嘛!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4684
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

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

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 17:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表