Project1

标题: [开发用]alias_methods(Update Again!) [打印本页]

作者: 忧雪の伤    时间: 2011-6-20 21:05
标题: [开发用]alias_methods(Update Again!)
本帖最后由 忧雪の伤 于 2011-6-21 15:29 编辑
  1. class Module
  2.   def alias_methods(prefix, *methods)
  3.     methods.each {|item| (prefix = prefix + prefix
  4.     ) while method_defined?("#{prefix}#{item}") }
  5.     methods.each {|item| alias_method("#{prefix}#{item}", item) }
  6.     methods.collect {|item| "#{prefix}#{item}".to_sym }
  7.   end
  8. end
复制代码



Module#alias_methods(prefix, method1[, method2 ... ])
Module#alias_methods(prefix, method1[, method2 ... ])

    依次把 prefix 作为前缀定义 method1、method2 ... 的别名。
    别名存在的场合,自动叠加前缀。
    返回处理顺序的别名的数组。



例:
  1. module Foo
  2.   def foo
  3.   end
  4.   def pia
  5.   end
  6.   alias_methods(:_, :foo, :pia)
  7. end

  8. print Foo.method_defined?(:_foo) # => true
  9. print Foo.method_defined?(:_pia) # => true
复制代码



各种重大更新……谢谢 zh 啥的……




思路来源可以点击这里查看。
作者: darkscout3000    时间: 2011-6-21 04:07
这个就是⋯⋯可以快速给多个方法别名?

然后那个⋯⋯有点不明白的地方⋯⋯
  1. args[1].to_a unless args[1].is_a?(Array)
复制代码
这行code看起来基本上就假设args[1]是数列了?
印象中没有多少类有to_a的方法吧⋯⋯
作者: 忧雪の伤    时间: 2011-6-21 12:18
本帖最后由 忧雪の伤 于 2011-6-21 12:23 编辑
darkscout3000 发表于 2011-6-21 04:07
这个就是⋯⋯可以快速给多个方法别名?

然后那个⋯⋯有点不明白的地方⋯⋯这行code看起来基本上就假设args ...


话说到底是to_a还是to_ary?
这只是方便而已。
to_a 和 to_ary 都确认可以了。
to_a的一个例子。
  1. print (1...3).to_a
复制代码


忧雪の伤于2011-6-21 12:42补充以下内容:
各种更新自顶。
作者: Zhen~败类    时间: 2011-6-21 12:44
板凳都没了,还让我怎么活、
作者: DeathKing    时间: 2011-6-21 13:26
哈哈,的确是个好功能,想想,以前加强默认脚本的时候,需要自己手工 alias 多少 method 啊……

可以考虑加入一个新功能,比如,给符合正则式的方法重命名什么的。




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